之前学习了数据库原理,上学期也学了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. js添加删除元素

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  2. 对常量的引用(reference to const)的一般用途(转载)

    如果是对一个常量进行引用,则编译器首先建立一个临时变量,然后将该常量的值置入临时变量中,对该引用的操作就是对该临时变量的操作.对C++常量引用可以用其它任何引用来初始化:但不能改变. 关于引用的初始化 ...

  3. xhprof failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '

    wget http://www.graphviz.org/pub/graphviz/ARCHIVE/graphviz-2.28.0.tar.gz tar xzvf graphviz-2.28.0.ta ...

  4. Servlet基础知识(三)—— 会话机制Session,Session和Cookie的异同

    Servlet会话机制: Http是一种无状态协议,它是无记忆的.也就是说,服务器不会保存用户的任何信息,当同一用户再次去访问时,服务器是不认识你的,它还是会建立新的连接. 但有时候我们需要服务器保留 ...

  5. Android Log工具类

    import java.text.SimpleDateFormat; import java.util.Date; import android.util.Log; public class LogU ...

  6. RHEL6.4 NFS文件共享服务搭建

    NFS文件共享服务 1 实验方案 使用2台RHEL6.4虚拟机,其中一台作为NFS共享服务器(192.168.100.1).另外一台作为测试用的NFS客户机(192.168.100.2) 2.实现 2 ...

  7. QT完美转换特殊字符的大小写

    Util::ShowMessage(QString::fromUtf8("ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØŒŠþÙÚÛÜÝŸ€")); Util::ShowMess ...

  8. Uva 1612 Guess

    Thinking about it: 题目要求最后一名(也就是第N位)的分数要尽量的大,那么就一定要求第N-1名的分数也要尽量大.假如N-1可以取400和500,那么N-1应该取500,如果取400, ...

  9. Linux操作系统定时任务系统Cron入门、PHP计划任务以及rpc示例

    一.简单介绍 1.cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务: servic ...

  10. Linux 进程通信之 ——信号和信号量总结

    如今最经常使用的进程间通信的方式有:信号,信号量,消息队列,共享内存.       所谓进程通信,就是不同进程之间进行一些"接触",这种接触有简单,也有复杂.机制不同,复杂度也不一 ...