之前学习了数据库原理,上学期也学了oracle数据库,我的学习视频上是讲的mysql数据库,其实都差不多,复习了下sql知识,数据库的学习就没有写下来了,就从Java怎么操作数据库开始吧。

  因为这年过完了,开始新的学习,有时间边学边写了。其实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学习之JDBC的更多相关文章

  1. Java学习之JDBC 2019/3/10

    Java学习之JDBC 大部分的程序都是用来通过处理数据来达到人们预期的效果,数据是粮食,没有数据操作的程序就像helloworld程序一样没有用处.因此数据库操作是重中之重,是程序发挥功能的基石,j ...

  2. Java学习笔记——JDBC读取properties属性文件

    Java 中的 properties 文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件. 文件的内容是格式是"键=值"(key-valu ...

  3. Java学习笔记——JDBC之与数据库MySQL的连接以及增删改查等操作

    必须的准备工作 一.MySQL的安装.可以参考博文: http://blog.csdn.net/jueblog/article/details/9499245 二.下载 jdbc 驱动.可以从在官网上 ...

  4. Java学习笔记--JDBC数据库的使用

    参考  hu_shengyang的专栏 : http://blog.csdn.net/hu_shengyang/article/details/6290029 一. JDBC API中提供的常用数据库 ...

  5. java学习之jdbc的封装

    jdbc是连接数据库必不可少的工具,但每次连接都要重新写一遍太麻烦了,也不利于代码的可读性,这里做一个工具类进行封装. package com.gh; import java.sql.Connecti ...

  6. JAVA学习笔记 -- JDBC及其应用

    一个.准备工作 1.开放SQL Server服务与支持TCP/IP  进一步确认TCPport watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk ...

  7. Java学习(JDBC java连接数据库)

    一.概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写 ...

  8. Java学习:JDBC快速入门

    本节类容 JDBC基本概念 快速入门 JDBC基本概念 概念: Java DataBase Connectivity Java 数据库连接,Java语言操作数据库 JDBC本质: 其实是官方(sun公 ...

  9. Java学习之==>JDBC

    一.概述 官方解释: JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的 Java API,可以为多种关系型数据库提供统一访问,它由一组用 ...

随机推荐

  1. HDU4323-Magic Number(levenshtein distance-编辑距离)

    描述: There are many magic numbers whose lengths are less than 10. Given some queries, each contains a ...

  2. 电脑硬件扫盲--CPU 显卡

    CPU: 主要2个厂商 Inter:core(酷睿) > pentinum(奔腾) > celeron(赛扬) AMD:athlon(速龙) > semporn(闪龙) 主频(GHz ...

  3. Aprori算法[关联规则算法]

    <meta http-equiv="Content-Type" content="text/html; charset=GBK" /> <?p ...

  4. MySQL 表分区A

    在MySQL中表的分区类型总的来说有四种: 第一种:range分区.基于一个给定的区间范围,把数据分配到不同的分区. 第二种:list   分区.基本枚举的值列表进行分区. 第三种:hast 分区.基 ...

  5. 调色板类QPalette——包含了Qt窗口不见的颜色组(collor group),和Windows右键属性外观非常类似

    QPalette类包含了Qt窗口不见的颜色组(collor group); 1.Active组,该组的颜色用户当前活动的(active)窗口,即具有键盘或鼠标焦点的窗口; 2.Inactive组,该组 ...

  6. kafka初探

    http://www.infoq.com/cn/articles/kafka-analysis-part-1

  7. class类的sizeof计算

    class no_virtual { public: void fun1() const{} int fun2() const { return a; } private: int a; } clas ...

  8. hdoj Scaena Felix

    Scaena Felix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  9. linux线程间同步方式汇总

    抽空做了下linux所有线程间同步方式的汇总(原生的),包含以下几个: 1, mutex 2, condition variable 3, reader-writer lock 4, spin loc ...

  10. linux之线程

    http://blog.csdn.net/lanyan822/article/details/7586845 POSIX线程数据类型: pthread_t 线程标识符: pthread_mutex_t ...