`

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数据库连接池总结

    使用 JDBC 访问数据库存在一些问题,如每一次 Web 请求都要建立一次数据库连接,建立连接是一个费时的活动,每次都得花费 0.05s~1s 的时间,而且系统还要分配内存资源。 数据库连接池(Connection Pool)的工作...

    JDBC连接数据库总结

    JDBC连接数据库总结 JDBC(Java Database Connectivity)是一种Java API,用于连接和操作关系数据库。它提供了一种独立于数据库管理系统的方式来访问和操作数据库。 连接数据库 在JDBC中,连接数据库是通过`...

    数据库概论实验范文实验八:通过JDBC方式访问数据库

    此外,他们还可能讨论了使用JDBC的优缺点,比如它简化了数据库操作,但可能涉及一些性能和安全问题。 通过这样的实验,学生不仅能熟悉数据库的基本操作,还能深入理解数据库连接池的概念,学习如何使用连接池(如C3...

    使用JDBC总结操作数据库

    下面将详细阐述JDBC操作数据库的基本步骤以及一些关键知识点。 1. **加载数据库驱动**: - 在开始数据库操作前,必须先加载对应的数据库驱动。在Java中,这通常通过`Class.forName()`方法完成。例如,对于Oracle...

    java 连接sql数据库时的心得

    - 数据库连接字符串:`String RL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=TESTDB";` - `jdbc:microsoft:sqlserver`是特定于SQL Server的JDBC协议。 - `localhost:1433`表示数据库服务器地址及...

    java 连接各种数据库 总结

    使用JDBC连接Access数据库时,URL可能类似于`jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\path\to\your\db.accdb`。 此外,`源码`标签可能暗示了博文包含了实际的Java代码示例,而`工具`...

    数据库JDBC驱动试用心得.doc

    首先,JDBC驱动是Java连接数据库的标准接口,它允许Java开发者使用SQL语言执行数据库操作。试用过程中,作者强调了JDBC驱动的跨平台特性,这得益于Java的“一次编写,到处运行”理念。无论是Windows XP还是SUN ...

    JAVA与数据库实训项目实习感想心得体会9篇范文

    同时,JDBC(Java数据库连接)是连接JAVA应用和数据库的重要桥梁,我们学习了如何编写DAO(数据访问对象)层,通过预编译的PreparedStatement来防止SQL注入等安全问题。 此外,实训项目往往涉及到MVC(模型-视图-...

    自学JDBC数据编程(PDF)

    **示例代码**:下面是一个简单的示例,演示如何使用JDBC连接Oracle数据库并执行SQL查询: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql....

    java 连接sql server数据库

    Java 连接 SQL Server 数据库是 Java 开发中一个非常重要的步骤,学习 Java 首先应该学会怎么样连接数据库。下面是 Java 连接 SQL Server 2000 的基本方法和心得。 下载SQL Server 2000 Driver for JDBC 下载 SQL ...

    使用JDBC连接SQL SERVER 2008的方法

    通过以上步骤,你应该能够成功地使用JDBC连接到SQL SERVER 2008。不过,为了确保连接的安全性和性能,建议使用连接池(如Apache DBCP或HikariCP)来管理数据库连接,并考虑使用PreparedStatement来执行SQL语句,以...

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

    接着,创建了一个名为`DBUtil`的工具类,该类提供静态方法`getConnection()`来获取数据库连接,使用了JDBC API的`Class.forName()`加载驱动,然后通过`DriverManager.getConnection()`建立连接。 实验一之后,实验...

    Java JDBC编程总结

    这些驱动本质上是一些实现了JDBC接口的类,并被打包成JAR文件供Java程序使用。不同数据库之间的操作机制存在差异,因此JDBC驱动也会有所不同,但作为Java开发者,我们主要关注的是JDBC的API接口,而不必关心具体的...

    [详细完整版]数据库实验二.doc

    JDBC(Java Database Connectivity)则是Java平台的标准接口,用于连接Java应用程序和各种数据库。 第二个目标是掌握通过编程控制数据库的方法。在本实验中,学生需要使用C#或Java编写代码,与MS SQL Server 2008...

    JDBC.rar_jdbc PostgreSQL_oracle_postgresql

    标题中的“JDBC.rar_jdbc PostgreSQL_oracle_postgresql”表明这个压缩包文件包含了关于Java数据库连接(JDBC)...学习这些内容,开发者可以更好地理解和使用JDBC连接不同的数据库系统,提升数据库操作的效率和灵活性。

    SSM框架druid连接池,sql server数据库

    在SSM项目中,数据库连接管理是至关重要的,而Druid则是一个优秀的数据库连接池组件,它由阿里巴巴开源并维护,提供了强大的监控和扩展功能。 Druid连接池的主要优点包括: 1. **性能优异**:Druid经过大量的性能...

    数据存储实验4-NoSQL和关系数据库的操作比较.doc(实验报告)

    使用Java客户端编程,添加数据:English:45 Math:89 Computer:100,使用JDBC连接MySQL数据库,执行insert语句,插入数据到学生表中,并输出结果。 ### NoSQL数据库操作 使用HBase、Redis、MongoDB等NoSQL数据库...

    Servlet+MySQL实现登录功能.zip

    3. **JDBC连接池**:为了提高性能和资源管理,项目中使用了连接池。连接池预先创建并维护一定数量的数据库连接,当应用程序需要时可以快速获取,用完后归还。这减少了创建和关闭数据库连接的开销。常见的连接池实现...

Global site tag (gtag.js) - Google Analytics