站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题高分请教高手JDBC的问题,实在不知道那里错了。。在线等

高分请教高手JDBC的问题,实在不知道那里错了。。在线等

摘要: 高分请教高手JDBC的问题,实在不知道那里错了。。在线等


文件data.properties:
jdbc.drivers=com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc.url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=student
jdbc.uid=sa
jdbc.pwd=

源码:
import java.sql.*;
import java.util.*;
import java.io.*;
public class propertiesTest {

/**
* @param args
*/
private Connection con=null;
private PreparedStatement prestat=null;
private ResultSet rs=null;
String sql;
String num,name,sex,age;
int math,collegenglish;

propertiesTest(String databasetable)
{
try
{
con=getConnection();

sql=-#34;UPDATE -#34;+databasetable+-#34; SET 高等数学=? WHERE 年龄-#62;?-#34;;
prestat=con.prepareStatement(sql);
for(int i=0;i-#60;5;i++)
{
prestat.setInt(1, 60);
prestat.setString(2, -#34;25-#34;);
prestat.executeUpdate();
}

sql=-#34;SELECT * FROM -#34;+databasetable;
rs=prestat.executeQuery(sql);

System.out.println(-#34;学号 -#34;+-#34;姓名 -#34;+-#34;性别 -#34;+-#34;年龄 -#34;+-#34;高等数学 -#34;+-#34;英语-#34;);

while(rs.next())
{
num=rs.getString(1);
name=rs.getString(2);
sex=rs.getString(3);
age=rs.getString(4);

math=rs.getInt(5);
collegenglish=rs.getInt(6);

System.out.println(num+-#34;-#34;+name+-#34;-#34;+sex+-#34;-#34;+age+-#34;-#34;+math+-#34; -#34;+collegenglish);
}
}catch(SQLException e)
{
e.printStackTrace();
}catch(IOException e)
{
e.printStackTrace();
}

}
private static Connection getConnection() throws IOException,SQLException
{
InputStream ist=new BufferedInputStream(new FileInputStream(new File(-#34;.-#34; + File.separator+-#34;data.properties-#34;)));
Properties prop=new Properties();
prop.load(ist);
ist.close();

String drivers=prop.getProperty(-#34;jdbc.drivers-#34;);
if (drivers != null) System.setProperty(-#34;jdbc.drivers-#34;, drivers);
String url=prop.getProperty(-#34;jdbc.url-#34;);
String uid=prop.getProperty(-#34;jdbc.uid-#34;);
String pwd=prop.getProperty(-#34;jdbc.pwd-#34;);

return DriverManager.getConnection(url, uid, pwd);

}
public static void main(String[] args) {
// TODO 自动生成方法存根

propertiesTest pro=new propertiesTest(-#34;student-#34;);
}

}


错误信息:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid call Statement method: {0}
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.executeQuery(Unknown Source)
at propertiesTest.-#60;init-#62;(propertiesTest.java:32)
at propertiesTest.main(propertiesTest.java:76)

应该怎么改,大家帮帮我!



错误提示是非法调用STATEMENT方法,我觉得我没写错啊,大家帮忙看看,有高手在嘛?


高手呢?高手都泡妞吃饭去了?


CSDN人气怎么这样了?


可以按我下面的办法试试:
for(int i=0;i-#60;5;i++)
{
sql=-#34;UPDATE -#34;+databasetable+-#34; SET 高等数学=? WHERE 年龄-#62;?-#34;;
prestat.setInt(1, 60);
prestat.setString(2, -#34;25-#34;);
prestat.addBatch(sql);
}
prestat.executeBatch();




sql应该放for循环外面


那个SQL?FOR里没有SQL啊


TO zhangj0571(笨鸟飞飞)

改后错误依旧



不明白,
学习


那这样吧,不要用PreparedStatement,for循环里面生成sql语句,然后就是用statement.addBatch(sql),然后for循环结束后,statement.executeUpdate();


for循环里没问题,调试时候我+了打印信息


statement.executeUpdate();--#62;statement.executeBatch();


友情up


TO zhangj0571(笨鸟飞飞)

我就是想用PREPAREDSTATEMENT实现替换,改STATEMENT就没意义了

有高手嘛,帮帮忙!!!!


sql=-#34;UPDATE -#34;+databasetable+-#34; SET 高等数学=? WHERE 年龄-#62;?-#34;;
prestat=con.prepareStatement(sql);
for(int i=0;i-#60;5;i++)
{
prestat.setInt(1, 60);
prestat.setString(2, -#34;25-#34;);
prestat.executeUpdate();
}

年龄字段是字符串吗? 字符串可以用 -#62; 判断?

另外,你这个update语句没有任何意义,做了5次同样的动作,仅仅是测试吗?


for(int i=0;i-#60;5;i++)
{
prestat.setInt(1, 60);
prestat.setString(2, -#34;25-#34;);
prestat.executeUpdate();
prestat.clearParameter();
}


年龄字段是字符串吗? 字符串可以用 -#62; 判断?

------------------------------------------------------------------------------------
加个转换试试


简单测试方法:

先判断连接是否正常. 打印Statement的信息.

在数据库客房端实际输入SQL ,要能正确执行.

把程序中的SQL语句打印出来. 和上面的比较一下,

一般情况下, 通过以上几个步骤, 就不应该出现什么问题了.

如果还有问题, 就有可能数据库不支持 setAutoCommit()等一些特殊方法, 先简化到最简单的状态 , 然后再执行


TO kevinliuu(@。@)

这程序只是个测试。。。我把年龄改成INT了,可是错误依旧


TO pauliuyou(paul)

我用打印信息测试过了,可以连接,SQL语句在SQL里可以运行的


看看我这个,没错误的!也许有启发
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBConnect {

/**
* @author abc
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
public Connection getConnection() throws ClassNotFoundException, SQLException {
String sql = new String(-#34;INSERT INTO emp (id, name, password) VALUES (11, -#39;LeoK-#39;, -#39;pass-#39;) -#34;);

Class.forName(-#34;com.gbase.jdbc.Driver-#34;);

Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try{
con = DriverManager.getConnection(-#34;jdbc:gbase://192.168.2.109:5258/user1-#34;,
-#34;root-#34;,-#34;111111-#34;);


stmt = con.createStatement();
stmt.execute(sql);

rs = stmt.executeQuery(-#34;select * from emp limit 5-#34;);


while (rs.next()) {
System.out.print(-#34;ID: -#34;+rs.getString(-#34;id-#34;));
System.out.print(-#34; Name: -#34;+rs.getString(-#34;name-#34;));
System.out.print(-#34; PassWord: -#34;+rs.getString(-#34;password-#34;));
System.out.print(-#34;/n-#34;);
}
}catch(Exception e){
e.printStackTrace();
}finally{
rs.close();
stmt.close();
con.close();
}

return null;
}


public static void main(String[] args) {

DBConnect aa = new DBConnect();
try {
aa.getConnection();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}



你的表里字段名是中文的?“高等数学“,“年龄”?


把你表里字段名别用中文,试一下,如果你用用中文,那么你的JDBC就需要设置字符集等一系列问题,先测试一下是不是这个问题。


sql=-#34;SELECT * FROM -#34;+databasetable;
rs=prestat.executeQuery(sql);

-------------
用新的Statement来执行,之前那个已经被预先编译了.


我想我知道你的问题在哪了
prestat=con.prepareStatement(sql);你这句话是预编译了一个包含sql语句的prepareStatement
但是你又写了下面的语句
sql=-#34;SELECT * FROM -#34;+databasetable;
rs=prestat.executeQuery(sql);
等于是同一个prepareStatement包含了两个不同的sql语句,这怎么行呢
你应该createStatement创造一个新的statement 再执行第二句sql,应该就OK了


sql=-#34;SELECT * FROM -#34;+databasetable;
在这句后+prestat=con.prepareStatement(sql);



↑返回目录
前一篇: 想利用MVC模式实现一个小程序,遇到了麻烦,高手帮忙看下。在线等
后一篇: 高分请教高手一个多线程的问题。。在线等