java学习之JDBC
2016-02-18 22:15
316 查看
之前学习了数据库原理,上学期也学了oracle数据库,我的学习视频上是讲的mysql数据库,其实都差不多,复习了下sql知识,数据库的学习就没有写下来了,就从Java怎么操作数据库开始吧。
因为这年过完了,开始新的学习,有时间边学边写了。其实JDBC网上教程挺多的,我看视频学习的笔记都尽量写在代码里了。就直接上代码吧。
因为这年过完了,开始新的学习,有时间边学边写了。其实JDBC网上教程挺多的,我看视频学习的笔记都尽量写在代码里了。就直接上代码吧。
package com.gh; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * PreparedStatement的setDate类是java.sql包里的Date * ResultSet 的getDate还回一个java.sql.Date * sql.Date是util.Date的子类 可以直接转util.Date * util.Date转sql.Date可以 new sql.Date(new util.Date().getTime()); * @author ganhang * */ public class JdbcDemo { //驱动类 public static String Driver="oracle.jdbc.OracleDriver"; //数据库地址 public static String url="jdbc:oracle:thin:@localhost:1521:orcl"; //数据库用户名 public static String user="scott"; //数据库密码 public static String password="."; /** * 查找 */ public static void find(){ try { Class.forName(Driver); Connection conn=DriverManager.getConnection(url, user, password); String sql="select * from test"; PreparedStatement ps=conn.prepareStatement(sql);//不要用Stateme ,有sql注入问题,不安全 ResultSet rs=ps.executeQuery();//返回结果集(实际上是引用) while(rs.next()){ System.out.println(rs.getInt(1)); } rs.close(); ps.close(); conn.close(); System.out.println("success!"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } /** * jdbc事务处理 * 处理多条sql语句(运行sql脚本) */ public static void update(){ /** * 这里我发现如果想用addBatch()方法添加批处理命令只能用Statement接口 * 而且addBatch()方法不能添加查询语句 * 如果用PreparedStatement只能单独执行一句sql */ Connection conn=null; try { Class.forName(Driver); conn=DriverManager.getConnection(url, user, password); conn.setAutoCommit(false);//改为手动commit Statement ps=conn.createStatement(); String sql1="insert into test values(16)"; //PreparedStatement ps=conn.prepareStatement(sql1); //ps.addBatch(); ps.addBatch(sql1); //String sql2="update test set n=17 where n=16"; String sql2="delete from test where n=1"; //ps=conn.prepareStatement(sql2); ps.addBatch(sql2); ps.executeBatch(); //懒得数据库去查询。。。直接这边输出 //ps=conn.prepareStatement(sql3); String sql3="select * from test"; ResultSet rs=ps.executeQuery(sql3); while(rs.next()){ System.out.println(rs.getInt(1)); } conn.commit();//提交事务 ps.close(); conn.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } } //Statement实现,不安全 public static void insert(){//更新删除只改sql就可以 try { //加载驱动 Class.forName(Driver); //获得连接,注意是java.sql的Connection,mysql包也有Connection接口 Connection conn=DriverManager.getConnection(url, user, password); //sql语句 String sql="insert into test values(100)"; //获得Statement对象 //说明文档有这么一句注释:在默认情况下,同一时间每个 Statement 对象在只能打开一个 ResultSet 对象。 //因此,如果读取一个 ResultSet 对象与读取另一个交叉,则这两个对象必须是由不同的 Statement 对象生成的。 //如果存在某个语句的打开的当前 ResultSet 对象,则 Statement 接口中的所有执行方法都会隐式关闭它。 Statement stat=conn.createStatement(); //执行sql(实际上是把sql发送给数据库,数据库去执行类似Scoket通信) stat.executeUpdate(sql); //关闭相关连接释放资源 stat.close(); conn.close(); System.out.println("success!"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } //PreparedStatement实现 public static void insert2(int n){ try { Class.forName(Driver); Connection conn=DriverManager.getConnection(url, user, password); String sql="insert into test values(?)"; PreparedStatement ps=conn.prepareStatement(sql); ps.setInt(1, n); ps.executeUpdate(); ps.close(); conn.close(); System.out.println("success!"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } public static void main(String[] args) { //insert(); //insert2(1); //find(); update(); } }
相关文章推荐
- Java 入门 之 AWT 与 Swing 的比较
- Java中JSON操作
- Spring事务的来龙去脉
- spring hibernate4整合问题
- Java byte数据类型详解
- Servlet生命周期
- Eclipse导出JavaDoc中文乱码问题解决
- 01、数据类型初阶(Java的基本数据类型)
- 简单的java Socket 例子
- 解决java mail发送TXT附件被直接显示在正文中的问题
- JDK,JRE,JVM区别与联系
- JAVA学习记录 -- 线程Ⅰ
- Java工程师成神之路
- 2015年阿里巴巴中间件比赛rpc框架
- KeeCMS框架
- JDBC(Java DataBase Connectivity)连接到MySQL
- Java学习笔记2016.2.18 接口续、单例模式
- SpringMVC中在web.xml中添加中文过滤器的写法
- java5中原子型操作类的应用
- Java线程池应用