在连接数据库的类中调用executeQuery(),却显示找不到符号呢??? 在连接数据库的类中有这样一条语句: rs=stat.executeQuery(sql);//执行查询 为什么会提示错误can't find symbol 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 而且这一条语句也是显示同样的错误: count=stat.executeUpdate(sql);//执行更新 提示找不到executeUpdate方法~~~~~~~~~~ 你确定导入了sql类库?import java.sql.*; cannot find symbol symbol: method executeQuery(java.lang.String) location: variable stat of type java.beans.Statement我的源程序是这样的,照书一个字一个字打的,不能有什么错误的:package sheji;import java.awt.Image;import java.beans.Statement;import java.io.File;import java.io.FileInputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.Vector;import javax.swing.ImageIcon;public class DataBase { Connection con=null;//声明Connection引用 Statement stat;//声明语句 ResultSet rs;//声明结果集 int count;//用于记录更新记录数 public DataBase(){ try{ Class.forName("org.gjt.mm.mysql.Driver");//加载Mysql的驱动类 con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","");//创建连接 stat=(Statement) con.createStatement();//创建Statement对象 } catch(Exception e){e.printStackTrace();}//捕获异常并打印出来 } //数据库操作方法 public void selectDb(String sql){ //声明Select方法 try{ //对SQL语句进行转码 sql=new String(sql.getBytes(),"ISO-8859-1");//将Java默认编码转为ISO-8859-1 rs=stat.executeQuery(sql);//执行查询 } catch(Exception ei){ei.printStackTrace();} //打印异常 } public int updateDb(String sql){ //声明updata方法 try{ //对SQL语句进行转码 sql=new String(sql.getBytes(),"ISO-8859-1");//将默认编码转为ISO-8859-1 count=stat.executeUpdate(sql);//执行更新 } catch(Exception ei){ei.printStackTrace();}//打印异常 return count; //反回参数 } public void dbClose(){ //声明close方法 try{con.close();} //执行数据库关闭动作 catch(Exception e){e.printStackTrace();} //打印异常 } public int updatePic(String path,int eid){ try{ //创建预编译语句实现将图片存进数据库的功能 PreparedStatement ps=con.prepareStatement("update Person set Photo=? where EmplyeeID="+eid); //创建预编译语句 File f=new File(path);//创建一个文件对象 int length=(int)f.length();//获取图片的长度 byte[] b=new byte[length];//创建byte数组,其长度为图片文件的长度 FileInputStream fin=new FileInputStream(f);//创建文字型字节流对象,并为其指定源文件 fin.read(b); fin.close(); ps.setBytes(1,b); ps.execute(); ps.close(); } catch(Exception ei){ei.printStackTrace();} return count; } public Vector<String[]> getPerson() { //对员工信息进行搜索 Vector<String[]> vtemp= new Vector<String[]>(); String sql= "select EmployeeID,Name,Sex,Date,City,Nation,Polity,"+ "Culture,Marriage,Graduate,Spec,Speci,Wtype,Duty,Depart,"+ "IDcard,Address,Postcode,HomePhone,Mobile,Email From Person"; try{ rs=stat.executeQuery(sql); while(rs.next()){ String[] str=new String[21]; for(int i=0;i<str.length;i++) { str[i]=rs.getString(i+1); str[i]=new String(str[i].getBytes("ISO-8859-1"),"gb2312"); } vtemp.add(str);} } catch(Exception e){e.printStackTrace();} return vtemp; } public Vector<Image> getRecord(){ Vector<Image> image=new Vector<Image>(); try{ String sql="select Photo from Person"; rs=stat.executeQuery(sql); while(rs.next()){ byte[] buff=rs.getBytes(1); if(buff!=null) { image.add((new ImageIcon(buff)).getImage()); } else{ image.add(new ImageIcon("ico.gif").getImage()); }} } catch(Exception e){e.printStackTrace();} return image; } public Vector<String[]> getMessage() { Vector<String[]> v=new Vector<String[]>(); String sql = "selcet * from Attend"; try{ rs=stat.executeQuery(sql); while(rs.next()){ String[] str = new String[8]; for(int i=0;i<str.length;i++) { str[i]= rs.getString(i+1); str[i]= new String(str[i].getBytes("ISO-8859-1"),"gb2312"); } v.add(str); } } catch(Exception eo){eo.printStackTrace();} return v; } public Vector<String[]> getWage(){ Vector<String[]> vv=new Vector<String[]>(); String sql = "select * from Wage"; try{ rs=stat.executeQuery(sql); while(rs.next()){ String[] str= new String[10]; for(int i=0;i<str.length;i++) { str[i]=rs.getString(i+1); str[i] = new String(str[i].getBytes("ISO-8859-1"),"gb2312"); } vv.add(str); } }catch(Exception eov){eov.printStackTrace();} return vv; } /* ++++++++++++*/} 看了一下有一下两个地方要注意:1、引错了包:statement应该是java.sql.statement,你引的是java.beans.Statement;所以调用那两个方法时会错,你重新引包看又没有错。2、我们一般使用PreparedStatement,这个的用法和statement差不多,但是从安全性的角度讲我们一般都用PreparedStatement,不推荐使用statement。 不知道我说的对不对,但是我觉得有两个地方还需要说一下:1、记得关闭链接:你用的是mysql数据库,端口号是3306,但是在你的程序中没有看到关闭connection的语句,一个connection就是和数据库的一次链接,对于一个数据库连接数是有限的,一般在我们执行完增加、删除、修改、或是删除操作的时候都要及时关闭,如果不及时关闭的话你的程序运行一段时间之后就会崩溃了,也就是说你在用cmd进入命令提示符以后输入netstat -an会看到很多个3306在使用....... 嗯,重新引包之后就正确了,另外还有两个问题不太懂(都不是错误): 1:import java.util.Vector; 这句话提示集合已经过时,不知道是什么意思, 2: catch(Exception ei){ei.printStackTrace();} 提示打印栈跟踪,需要删除ei.printStackTrace(). 改完结果变成了 catch(Exception ei){} 1、Vector过时,可能是你的jdk版本比较高哈,但是1.6以前的版本都可以用的,这个倒没有什么,换一个集合就可以了,比如HashMap,ArrayList等等...。2、try{ //最好把可能出现异常的语句写在try语句里面,像对数据库操作之类的,特别是多表,出现异可以 回滚 int k=0; k=9/0;//这句会报出异常,所以下面这个不会执行,会直接执行catch里面的语句.. System.out.println("这句不会执行"); } catch(Exception e){//Exception是异常类的父类,所以上面的数学异常也是属于Exception的一种 e.printStackTrace();//这句话是就把上面出错的信息打印出来了 } 你确定k=9/0 这句话会抛出异常吗?你再试试看,用最新的jdk struts 参数问题,1到9能取到值,10个和10个以上的参数取不值 这样的类用JUNIT应该怎样测试呢? 我的struts2的json注解怎么不好用? spring配置问题 急! 用SSH框架做东西,大家给推荐几个好的web客户端技术吧 java中Tree的问题, 在线,急等, My eclipse 调试时出现“Class File Editor” 拦截器和过滤器的区别 奇怪的问题,关于SESSIONBEAN的 初写EJB的SessionBean,抱错,请帮忙看看。谢谢 struts文件上传问题 使用struts验证框架时如何校验两个字符串相等,比如注册时的密码和重复密码?
count=stat.executeUpdate(sql);//执行更新
提示找不到executeUpdate方法~~~~~~~~~~
import java.sql.*;
cannot find symbol
symbol: method executeQuery(java.lang.String)
location: variable stat of type java.beans.Statement我的源程序是这样的,照书一个字一个字打的,不能有什么错误的:package sheji;import java.awt.Image;
import java.beans.Statement;
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.ImageIcon;public class DataBase { Connection con=null;//声明Connection引用
Statement stat;//声明语句
ResultSet rs;//声明结果集
int count;//用于记录更新记录数 public DataBase(){
try{
Class.forName("org.gjt.mm.mysql.Driver");//加载Mysql的驱动类
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","");//创建连接
stat=(Statement) con.createStatement();//创建Statement对象
}
catch(Exception e){e.printStackTrace();}//捕获异常并打印出来
} //数据库操作方法
public void selectDb(String sql){ //声明Select方法
try{ //对SQL语句进行转码
sql=new String(sql.getBytes(),"ISO-8859-1");//将Java默认编码转为ISO-8859-1
rs=stat.executeQuery(sql);//执行查询
}
catch(Exception ei){ei.printStackTrace();} //打印异常
}
public int updateDb(String sql){ //声明updata方法
try{ //对SQL语句进行转码
sql=new String(sql.getBytes(),"ISO-8859-1");//将默认编码转为ISO-8859-1
count=stat.executeUpdate(sql);//执行更新
}
catch(Exception ei){ei.printStackTrace();}//打印异常
return count; //反回参数
}
public void dbClose(){ //声明close方法
try{con.close();} //执行数据库关闭动作
catch(Exception e){e.printStackTrace();} //打印异常
}
public int updatePic(String path,int eid){
try{ //创建预编译语句实现将图片存进数据库的功能
PreparedStatement ps=con.prepareStatement("update Person set Photo=? where EmplyeeID="+eid);
//创建预编译语句
File f=new File(path);//创建一个文件对象
int length=(int)f.length();//获取图片的长度
byte[] b=new byte[length];//创建byte数组,其长度为图片文件的长度
FileInputStream fin=new FileInputStream(f);//创建文字型字节流对象,并为其指定源文件
fin.read(b);
fin.close();
ps.setBytes(1,b);
ps.execute();
ps.close();
}
catch(Exception ei){ei.printStackTrace();}
return count;
}
public Vector<String[]> getPerson()
{
//对员工信息进行搜索
Vector<String[]> vtemp= new Vector<String[]>();
String sql= "select EmployeeID,Name,Sex,Date,City,Nation,Polity,"+
"Culture,Marriage,Graduate,Spec,Speci,Wtype,Duty,Depart,"+
"IDcard,Address,Postcode,HomePhone,Mobile,Email From Person";
try{
rs=stat.executeQuery(sql);
while(rs.next()){
String[] str=new String[21];
for(int i=0;i<str.length;i++)
{ str[i]=rs.getString(i+1);
str[i]=new String(str[i].getBytes("ISO-8859-1"),"gb2312");
}
vtemp.add(str);}
} catch(Exception e){e.printStackTrace();}
return vtemp;
}
public Vector<Image> getRecord(){
Vector<Image> image=new Vector<Image>();
try{
String sql="select Photo from Person";
rs=stat.executeQuery(sql);
while(rs.next()){
byte[] buff=rs.getBytes(1);
if(buff!=null)
{
image.add((new ImageIcon(buff)).getImage());
}
else{
image.add(new ImageIcon("ico.gif").getImage());
}}
}
catch(Exception e){e.printStackTrace();}
return image;
}
public Vector<String[]> getMessage()
{
Vector<String[]> v=new Vector<String[]>();
String sql = "selcet * from Attend";
try{
rs=stat.executeQuery(sql);
while(rs.next()){
String[] str = new String[8];
for(int i=0;i<str.length;i++)
{
str[i]= rs.getString(i+1);
str[i]= new String(str[i].getBytes("ISO-8859-1"),"gb2312");
}
v.add(str);
}
}
catch(Exception eo){eo.printStackTrace();}
return v;
}
public Vector<String[]> getWage(){
Vector<String[]> vv=new Vector<String[]>();
String sql = "select * from Wage";
try{
rs=stat.executeQuery(sql);
while(rs.next()){
String[] str= new String[10];
for(int i=0;i<str.length;i++)
{
str[i]=rs.getString(i+1);
str[i] = new String(str[i].getBytes("ISO-8859-1"),"gb2312");
}
vv.add(str);
}
}catch(Exception eov){eov.printStackTrace();}
return vv;
}
/* ++++++++++++*/}
1、引错了包:statement应该是java.sql.statement,你引的是java.beans.Statement;所以调用那两个方法时会错,你重新引包看又没有错。
2、我们一般使用PreparedStatement,这个的用法和statement差不多,但是从安全性的角度讲我们一般都用PreparedStatement,不推荐使用statement。
1、记得关闭链接:你用的是mysql数据库,端口号是3306,但是在你的程序中没有看到关闭connection的语句,一个connection就是和数据库的一次链接,对于一个数据库连接数是有限的,一般在我们执行完增加、删除、修改、或是删除操作的时候都要及时关闭,如果不及时关闭的话你的程序运行一段时间之后就会崩溃了,也就是说你在用cmd进入命令提示符以后输入netstat -an会看到很多个3306在使用.......
嗯,重新引包之后就正确了,另外还有两个问题不太懂(都不是错误):
1:import java.util.Vector; 这句话提示集合已经过时,不知道是什么意思,
2: catch(Exception ei){ei.printStackTrace();} 提示打印栈跟踪,需要删除ei.printStackTrace(). 改完结果变成了 catch(Exception ei){}
2、try{ //最好把可能出现异常的语句写在try语句里面,像对数据库操作之类的,特别是多表,出现异可以 回滚
int k=0;
k=9/0;//这句会报出异常,所以下面这个不会执行,会直接执行catch里面的语句..
System.out.println("这句不会执行");
} catch(Exception e){//Exception是异常类的父类,所以上面的数学异常也是属于Exception的一种
e.printStackTrace();//这句话是就把上面出错的信息打印出来了
}