下面是java操作ACCESS的部分代码,很简单,但我却遇到很我很郁闷的问题,我不知道下面这两个方法中是不是哪出错了,我自己没看出来,我写了一个main函数,自己写sql语句然后自己写执行语句结果就没错,但当调用selectALL想完成access查询的时候就是用不了,restltset总为false,可是,selectAll中的执行语句与我在main中自己写的执行语句是一样的啊,为什么调用selectALL时就有错直接写就没错?
public String select(String sql,String table,String conditions,String group,String order)
{
if(table!=null)
{
sql=sql+" FROM "+table;
}
if(conditions!=null)
{
sql=sql+" WHERE "+conditions;
}
if(group!=null)
{
sql=sql+" GROUP BY "+group;
}
if(order!=null)
{
sql=sql+" ORDER BY "+order;
}
sql=sql+";";
return sql;
}// Function Query SELECT * FROM ...
public ResultSet selectAll(String table,String conditions,String group,String order)
{
String sql=" SELECT * ";
if(table!=null)
{
sql=select(sql,table,conditions,group,order);
System.out.println(sql);
try
{
//出错好象就在下面两句 prest=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
result=prest.executeQuery();
System.out.println(result.next());//此处打印结果为false
}
catch(Exception e)
{
e.printStackTrace();
}
}
else
{
result=null;
}
return result;
}下面为全部代码:
package test;
import java.sql.*;public class ProjectConnectionBean
{
static String jdbcDriver="sun.jdbc.odbc.JdbcOdbcDriver";
String jdbcURL="jdbc:odbc:bus";
String userName=null;
String password=null; private String dbs=null;
private Connection conn=null;
private ResultSet result=null;
private PreparedStatement prest=null;
static
{
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
e.printStackTrace();
}
}
public ProjectConnectionBean()
{
}// Procedure setConnection to the Database
public Connection setConnection()
{
try
{
conn=DriverManager.getConnection(jdbcURL,null,null);
}
catch(Exception e)
{
System.out.println(e.toString());
}
return conn;
}
public String select(String sql,String table,String conditions,String group,String order)
{
if(table!=null)
{
sql=sql+" FROM "+table;
}
if(conditions!=null)
{
sql=sql+" WHERE "+conditions;
}
if(group!=null)
{
sql=sql+" GROUP BY "+group;
}
if(order!=null)
{
sql=sql+" ORDER BY "+order;
}
sql=sql+";";
return sql;
}// Function Query SELECT * FROM ...
public ResultSet selectAll(String table,String conditions,String group,String order)
{
String sql=" SELECT * ";
if(table!=null)
{
sql=select(sql,table,conditions,group,order);
System.out.println(sql);
try
{
//出错好象就在下面两句 prest=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
result=prest.executeQuery();
System.out.println(result.next());//此处打印结果为false
}
catch(Exception e)
{
e.printStackTrace();
}
}
else
{
result=null;
}
return result;
}
//main函数部分
public static void main(String[] args) throws SQLException {
ProjectConnectionBean pro=new ProjectConnectionBean();
pro.conn=pro.setConnection();
ResultSet rs=null;
String sql="select * from bus_new;";
String sql2=pro.select("select * ", "bus_new", null, null, null);
////////////////////这里是直接调用////////////
try {
pro.prest=pro.conn.prepareStatement(sql2,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
} catch (Exception e) {
// TODO: handle exception
}
rs=pro.prest.executeQuery();
///////////////////////////////////////////////////////
/////////下面是用selectALL调用,但返回的ResultSet,打印rs的时候可以打印出对象可是调用rs.next()的时候就是空,数据库里面//有内容的呀,用上面的方法就完全可以。
//rs=pro.selectAll("bus_new", null, null, null);
System.out.println(pro.conn);
System.out.println(rs.next()); while(rs.next())
System.out.print(rs.getString("Name"));
}
}
请高手看看我到底错哪了,哪短路了。
public String select(String sql,String table,String conditions,String group,String order)
{
if(table!=null)
{
sql=sql+" FROM "+table;
}
if(conditions!=null)
{
sql=sql+" WHERE "+conditions;
}
if(group!=null)
{
sql=sql+" GROUP BY "+group;
}
if(order!=null)
{
sql=sql+" ORDER BY "+order;
}
sql=sql+";";
return sql;
}// Function Query SELECT * FROM ...
public ResultSet selectAll(String table,String conditions,String group,String order)
{
String sql=" SELECT * ";
if(table!=null)
{
sql=select(sql,table,conditions,group,order);
System.out.println(sql);
try
{
//出错好象就在下面两句 prest=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
result=prest.executeQuery();
System.out.println(result.next());//此处打印结果为false
}
catch(Exception e)
{
e.printStackTrace();
}
}
else
{
result=null;
}
return result;
}下面为全部代码:
package test;
import java.sql.*;public class ProjectConnectionBean
{
static String jdbcDriver="sun.jdbc.odbc.JdbcOdbcDriver";
String jdbcURL="jdbc:odbc:bus";
String userName=null;
String password=null; private String dbs=null;
private Connection conn=null;
private ResultSet result=null;
private PreparedStatement prest=null;
static
{
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
e.printStackTrace();
}
}
public ProjectConnectionBean()
{
}// Procedure setConnection to the Database
public Connection setConnection()
{
try
{
conn=DriverManager.getConnection(jdbcURL,null,null);
}
catch(Exception e)
{
System.out.println(e.toString());
}
return conn;
}
public String select(String sql,String table,String conditions,String group,String order)
{
if(table!=null)
{
sql=sql+" FROM "+table;
}
if(conditions!=null)
{
sql=sql+" WHERE "+conditions;
}
if(group!=null)
{
sql=sql+" GROUP BY "+group;
}
if(order!=null)
{
sql=sql+" ORDER BY "+order;
}
sql=sql+";";
return sql;
}// Function Query SELECT * FROM ...
public ResultSet selectAll(String table,String conditions,String group,String order)
{
String sql=" SELECT * ";
if(table!=null)
{
sql=select(sql,table,conditions,group,order);
System.out.println(sql);
try
{
//出错好象就在下面两句 prest=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
result=prest.executeQuery();
System.out.println(result.next());//此处打印结果为false
}
catch(Exception e)
{
e.printStackTrace();
}
}
else
{
result=null;
}
return result;
}
//main函数部分
public static void main(String[] args) throws SQLException {
ProjectConnectionBean pro=new ProjectConnectionBean();
pro.conn=pro.setConnection();
ResultSet rs=null;
String sql="select * from bus_new;";
String sql2=pro.select("select * ", "bus_new", null, null, null);
////////////////////这里是直接调用////////////
try {
pro.prest=pro.conn.prepareStatement(sql2,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
} catch (Exception e) {
// TODO: handle exception
}
rs=pro.prest.executeQuery();
///////////////////////////////////////////////////////
/////////下面是用selectALL调用,但返回的ResultSet,打印rs的时候可以打印出对象可是调用rs.next()的时候就是空,数据库里面//有内容的呀,用上面的方法就完全可以。
//rs=pro.selectAll("bus_new", null, null, null);
System.out.println(pro.conn);
System.out.println(rs.next()); while(rs.next())
System.out.print(rs.getString("Name"));
}
}
请高手看看我到底错哪了,哪短路了。
prest=conn.prepareStatement
conn 好像没实例吧,也没看见传进去
应该没有前滚或什么的吧 这个ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE 去掉
public ResultSet selectAll(String table,String conditions,String group,String order)
{
String sql=" SELECT * "; 这里面select前多了个空格~!
而自己写的
public static void main(String[] args) throws SQLException {
ProjectConnectionBean pro=new ProjectConnectionBean();
pro.conn=pro.setConnection();
ResultSet rs=null;
String sql="select * from bus_new;"; 这里面没有空格,郁闷就一个空格让我找半天
谢谢大家了~