java学习之JDBC
之前学习了数据库原理,上学期也学了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的更多相关文章
- Java学习之JDBC 2019/3/10
Java学习之JDBC 大部分的程序都是用来通过处理数据来达到人们预期的效果,数据是粮食,没有数据操作的程序就像helloworld程序一样没有用处.因此数据库操作是重中之重,是程序发挥功能的基石,j ...
- Java学习笔记——JDBC读取properties属性文件
Java 中的 properties 文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件. 文件的内容是格式是"键=值"(key-valu ...
- Java学习笔记——JDBC之与数据库MySQL的连接以及增删改查等操作
必须的准备工作 一.MySQL的安装.可以参考博文: http://blog.csdn.net/jueblog/article/details/9499245 二.下载 jdbc 驱动.可以从在官网上 ...
- Java学习笔记--JDBC数据库的使用
参考 hu_shengyang的专栏 : http://blog.csdn.net/hu_shengyang/article/details/6290029 一. JDBC API中提供的常用数据库 ...
- java学习之jdbc的封装
jdbc是连接数据库必不可少的工具,但每次连接都要重新写一遍太麻烦了,也不利于代码的可读性,这里做一个工具类进行封装. package com.gh; import java.sql.Connecti ...
- JAVA学习笔记 -- JDBC及其应用
一个.准备工作 1.开放SQL Server服务与支持TCP/IP 进一步确认TCPport watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk ...
- Java学习(JDBC java连接数据库)
一.概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写 ...
- Java学习:JDBC快速入门
本节类容 JDBC基本概念 快速入门 JDBC基本概念 概念: Java DataBase Connectivity Java 数据库连接,Java语言操作数据库 JDBC本质: 其实是官方(sun公 ...
- Java学习之==>JDBC
一.概述 官方解释: JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的 Java API,可以为多种关系型数据库提供统一访问,它由一组用 ...
随机推荐
- selenium css(转)
如果button上有class属性的,如: <button id="ext-eng=1026" class="x-right-button"...&g ...
- linux杂记(五)正确关机方法(shutdown,reboot,init,halt)
前言:由于在linux底下,每个程序(或者说是服务)都是在背景下运行的,因此,在你看不到的屏幕背后其实可能有相当多人同时在你的主机上面工作,如果 你直接按下电源开关来关机,则可能导致其他人的数据就此中 ...
- 美化 input type=file控件
大家都知道input的type=file控件默认样式是不能修改的 可以通过一个小技巧处理下 html: <a href="javascript:;" class=" ...
- css的repaint和reflow
css的repaint和reflow 浏览器为了重新渲染部分或整个页面,重新计算页面元素位置和几何结构(geometries)的进程叫做 reflow. 由于 reflow 是一种浏览器中的用户拦截( ...
- 多版本jQuery的使用剖析
</div> </div> <!-- basic scripts --> <!--[if !IE]> --> <!-- <![endi ...
- Codeblock解决注释乱码问题及在ubuntu中程序运行时乱码问题。
(1)修改源文件保存编码在:settings->Editor->gernal settings>other settings 看到左边的Encoding group Box,改为WI ...
- Tempter of the Bone(dfs奇偶剪枝)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- 普通IT和文艺IT工程师的区别
在一个UITableView的editing设置的方法实现过程中,我想到两种写法,顺便想了一下两种方法的区别.觉得这时一个普通IT工程师和NB工程师的区别一个有趣的印记. 您通常时怎么去实现的呢? - ...
- SQLServer 2008 :error 40 出现连接错误
在与SQLServer建立连接时出现与网络相关的或特定与实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且SQL SERVER已配置允许远程链接.(provide:命名管道提供程序,e ...
- div中央
.histroyMsgSearch{ background:#Fff; text-align: center; } CSS 怎样使DIV层水平居中 今天用CSS碰到个非常棘手的问题,DIV本身未定义 ...