当前位置:编程学习 > JAVA >>

JDBC连接数据库

Connection con = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=shop";
String user = "sa";
String password = "123";
con = DriverManager.getConnection(URL, user, password);

catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (con != null) {
System.out.println("数据库连接成功!");
} else {
System.out.println("数据库连接失败!");
}
String SQL = "select * from goods;";
Statement smt = null;
ResultSet rs = null;
try{
smt = con.createStatement();
rs = smt.executeQuery(SQL);

为什么连接上了数据库,直接查询这个语句没问题,但是执行rs = smt.executeQuery(SQL);这句时总是报如下异常。。
com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前行。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyResultSetHasCurrentRow(SQLServerResultSet.java:483)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getterGetColumn(SQLServerResultSet.java:2047)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2082)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2067)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getString(SQLServerResultSet.java:2401)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:135)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1812)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619) --------------------编程问答-------------------- 额。。上面那个错误是其他东西影响的。。但是有java.lang.NullPointerException这个异常、、还是那句、、怎么弄、、 --------------------编程问答--------------------
引用 1 楼 u010141154 的回复:
额。。上面那个错误是其他东西影响的。。但是有java.lang.NullPointerException这个异常、、还是那句、、怎么弄、、

空指针?看看smt = con.createStatement();执行了以后smt还是不是null --------------------编程问答-------------------- .NullPointerException异常是在哪一行发生的?

引用 1 楼 u010141154 的回复:
额。。上面那个错误是其他东西影响的。。但是有java.lang.NullPointerException这个异常、、还是那句、、怎么弄、、
--------------------编程问答-------------------- 这个问题是你SQL语句引起的    String SQL = "select * from goods;";   
将后面的分号去掉就好了  --------------------编程问答--------------------
String SQL = "select * from goods";   
应该是这个样子
--------------------编程问答--------------------
引用 5 楼 xmc125 的回复:
String SQL = "select * from goods";   
应该是这个样子


嗯。sql语句不需要; --------------------编程问答-------------------- 都是一些基础性的错误啊! --------------------编程问答-------------------- 你可以分别在这些语句后面添加一些输出语句,看看到底是哪一条语句出的错,然后再改
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("加载数据库驱动成功");
con = DriverManager.getConnection(URL, user, password);
System.out.println("连接数据库成功");
smt = con.createStatement();
System.out.println("查询成功");
rs = smt.executeQuery(SQL);
System.out.println("返回结果集成功"); --------------------编程问答-------------------- rs = smt.executeQuery(SQL);
出现NullPointerException,一般就是smt为null,继续往上检查,按楼上说的方法找出问题所在的那句 --------------------编程问答-------------------- String SQL = "select * from goods";   
还有要获取查询的内容,rs.hasNext()的判断条件不能少 --------------------编程问答--------------------
引用 6 楼 lye2000000_super 的回复:
Quote: 引用 5 楼 xmc125 的回复:


String SQL = "select * from goods";   
应该是这个样子


嗯。sql语句不需要;

如果不需要,SQL以什么表示命令的结尾呢,难道一次只能执行一句话? --------------------编程问答--------------------
引用 11 楼 Eniak 的回复:
Quote: 引用 6 楼 lye2000000_super 的回复:

Quote: 引用 5 楼 xmc125 的回复:


String SQL = "select * from goods";   
应该是这个样子


嗯。sql语句不需要;

如果不需要,SQL以什么表示命令的结尾呢,难道一次只能执行一句话?


的确,一次执行一句。多个SQL可以用存储过程
楼主的问题应该还不是在这里 --------------------编程问答--------------------
引用 4 楼 xmc125 的回复:
这个问题是你SQL语句引起的    String SQL = "select * from goods;";   
将后面的分号去掉就好了 
++ --------------------编程问答-------------------- 细节问题 。。 --------------------编程问答--------------------
引用 2 楼 zhu19774279 的回复:
Quote: 引用 1 楼 u010141154 的回复:

额。。上面那个错误是其他东西影响的。。但是有java.lang.NullPointerException这个异常、、还是那句、、怎么弄、、

空指针?看看smt = con.createStatement();执行了以后smt还是不是null

不是null了、、所有的对象都测试了。。不是null..但是报错了。、。
Connection con = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=shop";
String user = "sa";
String password = "123";
con = DriverManager.getConnection(URL, user, password);

catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (con != null) {
System.out.println("数据库连接成功!");
} else {
System.out.println("数据库连接失败!");
}
String SQL = "select * from goods,type where type.typeID=goods.typeID and typeName='水果'";
PreparedStatement smt=null ;
ResultSet rs=null ;
try{
smt = con.prepareStatement(SQL);
if(smt==null)
{
System.out.println("fds!");
}
else
{
System.out.println("fdsfdsdf");
}
rs = smt.executeQuery();
if(rs==null)
{

System.out.println("贝多芬!");
}
else
{
System.out.println("发个!");
}
String name=null;
float price=0.1f;
String typename=null;
// beansearchs.add(new GoodsBean(name,price,typename));
while(rs.next())
{
name=rs.getString("goodsName");
price=rs.getFloat("price");
typename="123";
beansearchs.add(new GoodsBean(name,price,typename));
}
return SUCCESS;
// }

2013-5-30 18:30:05 org.apache.jasper.compiler.TldLocationsCache tldScanJar
信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
数据库连接成功!
fdsfdsdf
发个!
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,