`

Jdbc连接查询数据库的一些心得

阅读更多
JDBC编程步骤
使用statement和prestatement对象
1.使用DriverManager类注册特定厂商的JDBC驱动程序
Class.forName("org.apache.derby.jdbc.ClientDriver");
2.建立与DBMS的会话连接
String url = "jdbc:derby://localhost:1527/DBName";
Connection con = DriverManager.getConnection(url,"DBusername","DBpassword");
3.创建SQL查询对象
Statement stmt = con.createStatement();
4.提交查询并接受结果
String query = "select * from Person";
ResultSet rs = stmt.executeQuery(query);
插入/删除/更新均为stmt.executeUpdate(String sql);
方法区别:
executeQuery返回值为ResultSet对象
executeUpdate返回值为影响操作的行数
5.从包裹对象中提取数据
while(rs.next()){//判断是否还有下一行结果
System.out.println("name"+rs.getName());
System.out.println("sex"+rs.getSex());
//在同一行中 访问 即取得属性的顺序不变
}
Statement 和 Preparedstatement 对象的区别在于后者提供预处理机制,性能更好,更为灵活,更加安全
Statement实例:
public static void main(String[] args){
Class.forName("org.apache.derby.jdbc.ClientDriver");
String url = "jdbc:derby://localhost:1527/DBName";
Connection connection = DriverManager.getConnection(url,"root","root");
Statement stmt = connection.createStatement();//创建包裹对象
//查询数据
ResultSet rs = stmt.executeQuery("select * from test");
System.out.println("-%5d","-10s","-10s","id","name","password");
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String password = rs.getString("password");
System.out.println("-%5d","-10s","-10s","id","name","password");
}
rs.close();
//插入数据
rs = stmt.executeQuery("select max(id) from test");
int id=20;
String name="zyh";
String password="harbor";
String insertsql= "INSERT INTO TEST VALUES " + "("+id+","+name+",'"+password+"')";
int rows = stmt.executeUpdate(insertsql);
System.out.println(rows+"rows has affected");
//删除数据
String delsql="DELETE FROM TEST WHERE ID="+id;
rows = stmt.executeUpdate(delsql);
System.out.println(rows+"rows has affected");
stmt.close();
connection.close();
}
 
Prestatement实例:
public static void main(String[] args){
private final String url = "jdbc:derby://localhost:1527/DBName";
try{
Class.forName("org.apache.derby.jdbc.ClientDriver");
}catch(ClassNotFoundException e){e.getMessage();return;}
Connection connection = null;
PrepardStatement stmt = null;
ResultSet rs = null;
try{
connection = DriverManager.getConnection(url,"root","root");
//插入数据
stmt = connection.preparedStatement("selct max(id) from test");
rs = stmt.executeQuery();
rs.next();
int nextID = rs.getInt(1)+1;
rs.close();
stmt.close();
int id=nextID;
String name="harbor";
String password="blue";
stmt = connection.preparedStatement("INSERT INTO TEST VALUES(?,?,?)");
stmt.setInt(1,id);
stmt.setString(2,name);
stmt.setString(3,password);
int rows = stmt.executeUpdate();
System.out.println(rows+"rows has affected");
stmt.close();
 
//查询数据
stmt = connection.preparedStatement("selct * from test where id=?");
stmt.setId(1,id);
rs = stmt.executeQuery();
while(rs.next()){
id = rs.getInt("id");
name = rs.getString("name");
password = rs.getString("password");
System.out.println("-%5d","-10s","-10s","id","name","password");
}
rs.close();
stmt.close();
 
//删除数据
stmt = connection.preparedStatement("DELETE FROM TEST WHERE ID=?");
stmt.setId(1,id);
rows = stmt.executeUpdate();
System.out.println(rows+"rows has affected");
}catch(SQLException e){
e.printStackTrace();
}finally{
if(rs!=null){try{rs.close();}catch(SQLException e){}}
if(stmt!=null){try{stmt.close();}catch(SQLException e){}}
if(connection!=null){try{connection.close();}catch(SQLException e){}}
}
  
 
}
使用datasource对象(数据库连接池)
InitialContext ctx = new InitialContext();//在命名空间中用容器缺省的信息创建JDNI上下文
ds = (DataSource)ctx.lookup(jdbc/DBName);//用JDNI的名称获得DataSource实例
用法:
//服务组件中获取ds对象;
private DataSource ds=null;
try{
InitialContext ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/JDBCNAME");
}catch(Exception e){
throw new SQLException(e);
}
//可以写在静态语句块中,也可写在构造器当中
构造器:
public BookService() throws BookStorageException {
try {
Context ctx = new InitialContext();
DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/test");
bookDAO = new BookDAO(dataSource);
} catch (Exception e) {
throw new BookStorageException(e.getMessage());
}
}
静态语句块:
private static BookDAO bookDAO;
static {
try{
Context ctx = new InitialContext();
DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/test");
bookDAO = new BookDAO(dataSource);
}catch(Exception e) {
e.printStackTrace();
}
}
 
可能遇到的错误:javax.naming.NoInitialContextException
解决办法,jndi是在tomcat中部署的,而测试类中只有jdk环境不允许,所以需要测试的话要运行web容器

 

2
1
分享到:
评论

相关推荐

    java_jdbc数据库连接池总结

    java_jdbc数据库连接池总结 有讲原理,不错

    使用JDBC总结操作数据库

    2. 通过驱动获取连接对象Connection con=DriverManager.getConnection(“jdbc:oracle:thin:@10.1.12.138:1521:orcl","scott", "de123");//相当与通过我们的用户名和密码登陆我们的pl/sql 3. 通过连接对象创建命令...

    JDBC连接数据库总结

    executeUpdate增、删、改 executeQuery查。用ArrayList装查询结果

    javaee 实验报告 实验一 JSP+Servlet+Javabean+jdbc-基于MVC模式的数据库的应用

    实验一 JSP+Servlet+Javabean+jdbc-基于MVC模式的数据库的应用 实验二 JSF+JPA实现用户注册 实验三 struts+spring+hibernate框架访问数据库的应用 实验四 使用WebService和EJBean访问数据库的应用

    Servlet+MySQL实现登录功能.zip

    纯Servlet+MySQL实现登录功能,页面也是Sevlet写的,下载之后修改jdbc.properites数据库用户和密码即可,内部使用了连接池功能,需要的自取,欢迎各位私聊我,

    java学习心得,笔记,思想

    java个人学习笔记,心得以及总结,还包括oracle,连接数据库的JDBC方法

    pycharm 使用心得(六)进行简单的数据库管理

    3)为数据库连接取一个名称,选择一个JDBC driver files。如果没有这个文件,pycharm可以自动下载。 4)选择一个JDBC driver class,mysql默认为:com.mysql.jdbc.Driver。oracle默认为:oracle.jdbc.

    学生信息管理系统java课程设计报告.doc

    (3)能连接数据库并实现对学生信息查询、增、删、改等功能。 4、系统主要包括以下几项功能: (1)添加学生信息; (2)查询学生信息; (3)删除学生信息; (4)修改学生信息。 5、界面构建 1、为了便于各种操作,软件采用...

    Java 学习笔记极其详细版(包括一些个人色彩不仅仅是纯笔记)

    数据库连接:JDBC的使用和数据库交互。 Java Web技术:Servlet、JSP、MVC架构。 框架应用:Spring、Hibernate、Struts等。 设计模式:常见设计模式的Java实现。 Java 8新特性:Lambda表达式、Stream API。 Java...

    svnadmin-SNV

    8.启动tomcat,让tomcat自行解压war包,然后编辑数据库配置文件的#mysql段,使其可以正常连接数据库 JspStudy\tomcat\webapps\svnadmin\WEB-INF\jdbc.properties #MySQL MySQL.jdbc.driver=com.mysql.jdbc.Driver ...

    xmljava系统源码-shiro:shirow3school+自编教程

    jdbc连接改为使用H2数据库,并使用spring-jdbc api; 某些难度不大的章节(不代表不重要)没有源代码分析,可从原文项目gitHub下载; 增加了与spring-boot集成自编章节; 排版略做改动,并修正一些错误; 如果知识点有...

    二十三种设计模式【PDF版】

    可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式之 Composite(组合) 就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于 和...

Global site tag (gtag.js) - Google Analytics