JAVA数据库查询操作(JDBC)
2016-07-27 11:05
441 查看
今天在公司尝试JDBC。练习过程中遇到了很多问题。特贴出来以供参考。
编译器:Eclipse Mars.1和sql server 2008。
过程:
先贴出代码和表:
参考书上的代码和网上教程,在
下载驱动后,把Microsoft SQL Server JDBC Driver 3.0\sqljdbc_3.0\chs\auth\x64\sqljdbc_auth.dll放在了C:\Windows\SysWOW64里面,并在环境变量classpath中添加了sqljdbc4.jar的地址。然而在Eclipse上运行后抛出异常,异常提示为com.jdbc.odbc.JdbcOdbcDriver,异常代码段为Class.forName(driver);。经查证,原来是混淆了Access和SQL
Server驱动程序类。改为com.microsoft.sqlserver.jdbc.SQLServerDriver后,出现了端口号1433#无效。在网上百度后发现端口号后面是不要加#号的,然而对比书上的提示:jdbc:sqlserver//hostname:port#;DatabaseName=dbname,可能是我误解了书上的意思。解决这个问题后再次运行,错误提示为用户无法登录。原因在于无法使用windows身份验证,设置为SQL Server身份验证,也就是初始账户密码sa,123456之后,提示dept有问题。原来是编写数据库语言的不细心导致的。内容如下:
String sql = "SELECT sNo,sName,sex,age FROM"
+ "Student WHERE dept = '计算机'";
在FROM" + "Student这一段中,SQL语言在这段的显示会是FROMStudent,中间是没有空格的,所以要在FROM后面或者Student的前面加入空格。解决完这个问题后结果终于显示出来了。再反思之前的问题,我尝试删除项目中的sqljdbc4.jar包,并且删除原先配置的环境变量,然而再次运行结果还是完美显示了出来,重启后也是这样,让我怀疑Eclipse
Mars.1版本是自带jdbc驱动的。这个问题的原因目前不知道。最后是结果图。欢迎指证~~
7月28日修改:原因已找到,原项目中的JRE System Library中存在sqljdbc4-4.0.jar,所以才能正常运行。
编译器:Eclipse Mars.1和sql server 2008。
过程:
先贴出代码和表:
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Jdbc { private static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; private static String url = "jdbc:sqlserver://localhost:1433;DatabaseName=StudentScore"; private static String user = "sa"; private static String password = "123456"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { Class.forName(driver); conn = DriverManager.getConnection(url,user,password); String sql = "SELECT sNo,sName,sex,age FROM " + "Student WHERE dept = '计算机'"; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); while(rs.next()) { String no = rs.getString("sNo"); String name = rs.getString("sName"); String sex = rs.getString("sex"); int age = rs.getInt("age"); System.out.println(no + " " + name + " " + sex + " " + age); } } catch(Exception e) { e.printStackTrace(); } finally { try { if(rs != null) rs.close(); if(stmt != null) stmt.close(); if(conn != null) conn.close(); } catch(Exception e) { e.printStackTrace(); } } } }
参考书上的代码和网上教程,在
http://www.microsoft.com/downloads/details.aspx?FamilyID=a737000d-68d0-4531-b65d-da0f2a735707&displayLang=zh-cn
下载驱动后,把Microsoft SQL Server JDBC Driver 3.0\sqljdbc_3.0\chs\auth\x64\sqljdbc_auth.dll放在了C:\Windows\SysWOW64里面,并在环境变量classpath中添加了sqljdbc4.jar的地址。然而在Eclipse上运行后抛出异常,异常提示为com.jdbc.odbc.JdbcOdbcDriver,异常代码段为Class.forName(driver);。经查证,原来是混淆了Access和SQL
Server驱动程序类。改为com.microsoft.sqlserver.jdbc.SQLServerDriver后,出现了端口号1433#无效。在网上百度后发现端口号后面是不要加#号的,然而对比书上的提示:jdbc:sqlserver//hostname:port#;DatabaseName=dbname,可能是我误解了书上的意思。解决这个问题后再次运行,错误提示为用户无法登录。原因在于无法使用windows身份验证,设置为SQL Server身份验证,也就是初始账户密码sa,123456之后,提示dept有问题。原来是编写数据库语言的不细心导致的。内容如下:
String sql = "SELECT sNo,sName,sex,age FROM"
+ "Student WHERE dept = '计算机'";
在FROM" + "Student这一段中,SQL语言在这段的显示会是FROMStudent,中间是没有空格的,所以要在FROM后面或者Student的前面加入空格。解决完这个问题后结果终于显示出来了。再反思之前的问题,我尝试删除项目中的sqljdbc4.jar包,并且删除原先配置的环境变量,然而再次运行结果还是完美显示了出来,重启后也是这样,让我怀疑Eclipse
Mars.1版本是自带jdbc驱动的。这个问题的原因目前不知道。最后是结果图。欢迎指证~~
7月28日修改:原因已找到,原项目中的JRE System Library中存在sqljdbc4-4.0.jar,所以才能正常运行。
相关文章推荐
- Eclipse编译ijkplayer
- eclipse注释没生效解决方法
- Javabean转换成json字符串的工具类
- spring mvc 在web请求中定义编码(org.springframework.web.filter.CharacterEncodingFilter
- 最普通的java for循环
- JAVA之字节缓冲流
- java.net.UrlConnection类的使用
- LNCS用户写作指南【 Springer Computer Science Proceedings 】
- Java那些坑(1):Java7的substring
- java 内部类
- java 创建对象的几种方式
- Java GUI学习笔记之初识AWT和Swing
- java.net.Url类的应用
- SpringMVC拦截器(资源和权限管理)
- Thrift-java学习小结
- Java 反射机制(1)
- springMVC 拦截器简单配置
- spring开发相关的资料
- struts2拦截器(Interceptor)与传统拦截器(Filter)
- Java 生成应用程序