select-运行下面的代码为什么这么慢

问题描述

运行下面的代码为什么这么慢

import java.awt.*;
import javax.swing.*;
import java.sql.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.regex.*;
import java.util.Random;
import static java.awt.BorderLayout.*;
import java.io.File;
import java.io.IOException;
public class SwingDemo
{
Random r;
Link lk,lk1;
ResultSet rs,rs1;
public void init()
{
JFrame jf=new JFrame();
final JPanel jp=new JPanel();
jp.setPreferredSize(new Dimension(300,300));
JPanel jp1=new JPanel();
final JTextField jtf=new JTextField(20);
jp1.setLayout(new FlowLayout(FlowLayout.RIGHT));
JButton jb=new JButton("发送");
JScrollPane jsp=new JScrollPane();
jp.add(jsp);
jf.setLayout(new BorderLayout());
jf.add(jp,NORTH);
jf.add(jp1,SOUTH);
jp1.add(jtf);
jp1.add(jb);

jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
jb.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String out="";
String result="";
String s=jtf.getText();
if(s.equals(""))
{
JOptionPane.showMessageDialog(null, "不能添加空白内容");

            }
            else if(s.length()<4)
            {
                result=find(s);
            }
            JPanel jp2=new JPanel();
            jp2.setPreferredSize(new Dimension(300,50));
            JTextArea jta1=new JTextArea();
            jta1.setBackground(Color.RED);
            jp2.setLayout(new FlowLayout(FlowLayout.LEFT));
            jp2.add(jta1);
            JPanel jp3=new JPanel();
            jp3.setPreferredSize(new Dimension(300,50));
            JTextArea jta2=new JTextArea();
            jta2.setBackground(Color.YELLOW);
            jp3.setLayout(new FlowLayout(FlowLayout.RIGHT));
            jp3.add(jta2);
            jp.setLayout(new BoxLayout(jp,BoxLayout.Y_AXIS));
            jp.add(jp2);
            jp.add(jp3);
            jta1.setText(s);
            jta2.setText(result);

        }
    });
}
public String find(String s)
{
        String result="";

        try
        {
            String sql="select *from chat1";
            lk=new Link(sql);
            rs=lk.sta.executeQuery(sql);
            while(rs.next())
            {
                String string =new String(rs.getString("question"));
                if(string.equals(s)||string.contains(s)||s.contains(string))
                {
                    try
                    {
                        String sql1="select * from chat where question='"+string+"'";
                        lk1=new Link(sql1);
                        rs1=lk1.sta.executeQuery(sql1);
                        while(rs1.next())
                        {
                            result=new String (rs1.getString("answer"));
                        }

                    }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }
                    finally
                    {
                        lk1.closeConn();
                    }
                }
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            lk.closeConn();
        }
        if(result.equals(""))
        {
            int i=3;
            int k=r.nextInt(i);
            if(k==0)
                result="asdfsdaf";
            else if(k==1)
                result="rtfdsg";
            else if(k==2)
                result="fgasdd";
        }
        return result;

}
public static void main(String[] args)
{
    new SwingDemo().init();
}

}
连接数据库的代码
import java.sql.*;
public class Link{
//ResultSet rs;//声明结果集引用
Connection conn;//声明Connection引用
Statement sta;
public Link(String ml){//有参构造器
try{
Class.forName("com.mysql.jdbc.Driver");//加载驱动器
String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";//url指向要访问的mysql数据库名
String name="root";//用户名
String pwd="123456";
conn=DriverManager.getConnection(url,name,pwd);//连接数据库
sta=conn.createStatement();//创建语句
//rs=sta.executeQuery(ml);//执行查询得到的结果集
}catch(SQLException e){//捕获异常并打印
e.printStackTrace();
}
catch(ClassNotFoundException e){
e.printStackTrace();}
}
public void closeConn(){//关闭数据库连接的方法
try{
//关闭结果集,语句,连接
//if(rs!=null)
// rs.close();
if(sta!=null)
sta.close();
if(conn!=null)
conn.close();
}catch(SQLException e){//捕获异常并打印
e.printStackTrace();
}
}
}

解决方案

代码不够优化,看下哪里可以优化下

解决方案二:

在VC++下面运行C代码的方法
下面提供一些代码

解决方案三:

有问题 你有多次执行SQL 语句,每次都是重新连接数据库
改一改,数据库连接只做一次,然后多次查询,最后用完了关闭

时间: 2024-12-05 04:49:09

select-运行下面的代码为什么这么慢的相关文章

JS简单实现多级Select联动菜单效果代码_javascript技巧

本文实例讲述了JS简单实现多级Select联动菜单效果代码.分享给大家供大家参考.具体如下: JS联动菜单,简单代码实现JS多级Select联动菜单,也就是大家常用的一款菜单,Select联动状态的菜单,网页上经常见到的效果,希望大家能用得上. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-simple-select-ld-menu-codes/ 具体代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD

scanf-新手练习,运行这段代码,打了几个字母回车就崩溃。

问题描述 新手练习,运行这段代码,打了几个字母回车就崩溃. #include int main(void){ char a; scanf(""%s""&a); printf(""%s""a); getchar();} 解决方案 不才给出个人答案首先得有返回,既然是int main 得有retur 0;但是重点是在char是单字符,,对于输入对个字母当然不行 解决方案二: 加个return试试

vscode 运行环境-求大神告知:如何在 visual studio code中编译运行C/C++代码?

问题描述 求大神告知:如何在 visual studio code中编译运行C/C++代码? 求大神告知:如何在 visual studio code中编译运行C/C++代码,如需配置环境,怎么配置?求详细操作,拜谢! 解决方案 http://stackoverflow.com/questions/30269449/how-do-i-set-up-vscode-to-compile-c-code google下就有答案 解决方案二: 如何在visual studio2015 中配置编写C.C++

线程-滑动窗口协议的模拟求一份能符合运行的c++代码

问题描述 滑动窗口协议的模拟求一份能符合运行的c++代码 要求: 1. Windows 环境下运行,程序应在1-2台PC上运行: 2. 演示在两台计算机间传输文件.允许在同一台机器中用两个独立线程来模拟 3. 功能: 1) 由一台PC(线程)向另一台PC(线程)发送数据包,界面应显示出双方帧个数变化,帧序号,发送和接受速度,暂停或重传提示等,界面中必须动态显示数据帧的发送情况和接受情况,包括在相应窗口详细显示相应的ACK和其他收发数据帧后发出的消息,以表明模拟协议的正确运作过程. 2) 接收方及

js实现div拖动动画运行轨迹效果代码分享_javascript技巧

本文实例讲述了js div拖动动画运行轨迹效果.分享给大家供大家参考.具体如下: 这是一款基于js实现的div拖动动画运行轨迹效果源码,是一款原生js div拖动效果制作鼠标拖动div动画运行轨迹效果代码.可以选择[记住轨迹]与[不记住轨迹]两种拖动显示模式,从而显示出不同的拖动效果. 运行效果图:                                        -------------------查看效果 下载源码------------------- 小提示:浏览器中如果不能

vb api beep 如何从蜂鸣器输入声音(win7/win8运行环境)代码如下:

问题描述 vb api beep 如何从蜂鸣器输入声音(win7/win8运行环境)代码如下: Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long Private Sub Command1_Click() playsnd 440, 200 playsnd 20001, 75 playsnd 495, 200 playsnd 20001,

如何实现自动记录程序运行过的代码所在的行数?

问题描述 想做一个小工具,它能打印出程序运行过的代码所在的行数.比如:1if(i==1)2...3else4...5dosth();6...现在让i等于1,然后运行代码,由所做的小工具自动地记录程序运行的路径1,2,5,6...这样的工具能实现么?怎么实现呢? 解决方案 解决方案二:以前我也想过类似的问题,至今还没有得到答案解决方案三:没想过...俺都是土办法,debug...解决方案四:研究一下stackTraceclassVisualBasic复制代码'Displaythestackfram

html-为什么在IE中运行这段代码会提示type为空或不是对象?为什么border属性会无法移除?

问题描述 为什么在IE中运行这段代码会提示type为空或不是对象?为什么border属性会无法移除? <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>example</title> <style type="text/css"> p{ border: thin solid black; background: g

《Oracle PL/SQL程序设计(第5版)》一一第2章 创建并运行PL/SQL代码

第2章 创建并运行PL/SQL代码 Oracle PL/SQL程序设计(第5版)即便一个PL/SQL程序员从来不重视系统设计或者单元测试这样的任务,他也必须熟悉下面这些最基本的操作: 在数据库中导航:创建和编辑PL/SQL源代码:编译PL/SQL源代码,修正编译器发现的代码错误(或者,可选的,处理警告信息):在某些环境下运行编译后的程序:检查程序执行结果(可能是从屏幕上的输出,或者是根据表中的数据变化,等等).PL/SQL是寄生在Oracle执行环境中的(因此说它是"嵌入式语言"),这

jquery操作select radio box实例代码

select框操作 获取值  代码如下 复制代码 $('#select').val() 设置值为xx的项为选中  代码如下 复制代码 $('#select').val(xx) 设置文本信息为yy的项为选中  代码如下 复制代码 $('#select option[text="yy"]').attr("selected", true); 获取select选中的索引:  代码如下 复制代码      $("#ddlRegType ").get(0).