使用JDBC进行简单的增删改查
JDBC为java的基础。用jdbc实现对数据库的增删改查的功能是程序员的基本要求。本例以mysql为例,首先要使用本例需要添加mysql-connector-java-5.1.7-bin.jar包。专门用来加载jdbc的驱动。如果数据库为oracle,相应的jar包换为ojdbc6.jar。
通过下面的代码可以练习一下,掌握jdbc的使用方法,自己可以对程序进行相应的扩展,可以试试oracle数据库,也可以试试MongoDB,还可以试试redis等。
package jdbc; import java.sql.*;
import java.util.UUID; public class JDBC_Test {
public static Connection getConnection() throws Exception {
String driver_mysql = "com.mysql.jdbc.Driver";
Class.forName(driver_mysql); // 数据库连接串
String mysql_url ="jdbc:mysql://127.0.0.1:3306/jdbc";
String userName = "root";
String password = "xiangpeng";//密码 // 获取数据库连接
Connection conn = DriverManager.getConnection(mysql_url, userName, password);
return conn;
} public static void main(String[] args) throws Exception {
//调用下面的方法
// JDBC_Test.createTableTest(); //建表
// JDBC_Test.addTest(); //添加
//JDBC_Test.addTest1(); // 预编译添加
// JDBC_Test.batchAddTest(); //批量添加
JDBC_Test.queryTest(); // 查询
// JDBC_Test.updateTest(); //更新
// JDBC_Test.delTest(); //删除
} //建表
public static void createTableTest()throws Exception{
Connection conn=getConnection();
String sql="create table JDBC_STUDENT3("+"ID VARCHAR2(32) NOT NULL,"+"NAME VARCHAR2(32),"+"SEX VARCHAR2(32)"+")";
PreparedStatement prestmt = conn.prepareStatement(sql);
boolean flag = prestmt.execute();
System.out.println("执行结果:"+flag);
prestmt.close();
conn.close();
} //添加
public static void addTest() throws Exception{
Connection conn=getConnection();
Statement stmt=conn.createStatement();
String sql="insert into jdbc_student(id, name, sex, birthday, age)"+"values(seq.nextval,'xp','m','to_date('2009-01-01','yyyy-MM-dd')','24')";
String uuid=getUUID();
String sql_uuid="insert into jdbc_student(id, name, sex, birthday, age)"+"values('"+uuid+"','xp','m','to_date('2009-01-01','yyyy-MM-dd')','24')";
int result=stmt.executeUpdate(sql_uuid);
System.out.println(result);
stmt.close();
conn.close();
} // java注入,采用预编译的方法插入数据
public static void addTest1() throws Exception {
Connection conn = getConnection();
conn.setAutoCommit(false);
String sql = "insert into jdbc_student(id, name, sex, birthday, age)"+ "values(?,?,?,?,?)";
PreparedStatement prestmt = conn.prepareStatement(sql);
String uuid = getUUID();
prestmt.setString(1, uuid);
prestmt.setString(2, "xp");
prestmt.setString(3, "m");
java.util.Date utilDate = new java.util.Date();
java.sql.Timestamp time = new java.sql.Timestamp(utilDate.getTime());
prestmt.setTimestamp(4, time);
prestmt.setInt(5, 24);
// 如果第一个结果是resultSet对象,就返回true;如果第一个结果是更新计数或者没有结果,则返回false
// 意思就是如果是查询的话就返回true,如果是更新或者插入的话就返回false
boolean result = prestmt.execute();
System.out.println("是否执行成功:" + result);
prestmt.close();
conn.close();
} //批量添加
public static void batchAddTest()throws Exception{
Connection conn=getConnection();
//开辟缓存
conn.setAutoCommit(false);
String sqla="insert into jdbc_student(id, name)"+"values('"+getUUID()+"', '张三a')";
String sqlb="insert into jdbc_student(id, name)"+"values('"+getUUID()+"', '张三b')";
String sqlc="insert into jdbc_student(id, name)"+"values('"+getUUID()+"', '张三c')";
Statement stmt =conn.createStatement();
stmt.addBatch(sqla);
stmt.addBatch(sqlb);
stmt.addBatch(sqlc);
} //查询
public static void queryTest() throws Exception {
Connection conn = getConnection();
String sql = "select * from jdbc_student t where name like ?";
PreparedStatement prestmt = conn.prepareStatement(sql);
prestmt.setString(1, "王%");
ResultSet rs = prestmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();// 获取元数据
int columnNum = rsmd.getColumnCount();
while (rs.next()) {
for (int i = 1; i <= columnNum; i++) {
System.out.print(rsmd.getColumnName(i) + ": ");
System.out.println(JDBC_Test.getValue(rs, rsmd.getColumnType(i), rsmd.getColumnName(i)));
}
System.out.println("-----------");
}
prestmt.close();
conn.close();
}
//更新
public static void updateTest()throws Exception{
Connection conn=getConnection();
Statement stmt=conn.createStatement();
String sql="update jdbc_student set name='李四散步吧' where id='2'";
int result=stmt.executeUpdate(sql);
System.out.println(result);
stmt.close();
conn.close();
}
//删除
public static void delTest()throws Exception{
Connection conn=getConnection();
Statement stmt=conn.createStatement();
String sql="delete jdbc_student where id='2'";
int result=stmt.executeUpdate(sql);
System.out.println(result);
stmt.close();
conn.close();
}
//uuid生成方法
public static String getUUID() {
return UUID.randomUUID().toString().replace("-", "");
}
//获取object的值
public static Object getValue(ResultSet rs, int type, String columnName)throws SQLException {
//type为java.sql.Types的具体对应值
if (type == 4) {// integer类型
return rs.getInt(columnName);
} else if (type == 12) {// varchar2类型
return rs.getString(columnName);
} else if (type == 91) {// date类型
return rs.getDate(columnName);
}
return null;
} }
表结构的数据类型如下:
上面获取object的值的方法,这个type为java.sql.Types的具体对应值,具体的数值见下面:
//java.sql.Types具体值
public final static int BIT = -7;
public final static int TINYINT = -6;
public final static int SMALLINT = 5;
public final static int INTEGER = 4;
public final static int BIGINT = -5;
public final static int FLOAT = 6;
public final static int REAL = 7;
public final static int DOUBLE = 8;
public final static int NUMERIC = 2;
public final static int DECIMAL = 3;
public final static int CHAR = 1;
public final static int VARCHAR = 12;
public final static int LONGVARCHAR = -1;
public final static int DATE = 91;
public final static int TIME = 92;
public final static int TIMESTAMP = 93;
public final static int BINARY = -2;
public final static int VARBINARY = -3;
public final static int LONGVARBINARY = -4;
public final static int NULL = 0;
public final static int OTHER = 1111;
public final static int JAVA_OBJECT = 2000;
public final static int DISTINCT = 2001;
public final static int STRUCT = 2002;
public final static int ARRAY = 2003;
public final static int BLOB = 2004;
public final static int CLOB = 2005;
public final static int REF = 2006;
public final static int DATALINK = 70;
public final static int BOOLEAN = 16;
public final static int ROWID = -8;
public static final int NCHAR = -15;
public static final int NVARCHAR = -9;
public static final int LONGNVARCHAR = -16;
public static final int NCLOB = 2011;
public static final int SQLXML = 2009;
[color=blue][/color][size=large][/size]
使用JDBC进行简单的增删改查的更多相关文章
- 通过JDBC进行简单的增删改查
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...
- 通过JDBC进行简单的增删改查(以MySQL为例) 目录
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...
- Java通过JDBC进行简单的增删改查(以MySQL为例)
Java通过JDBC进行简单的增删改查(以MySQL为例) 目录: 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JD ...
- 通过JDBC进行简单的增删改查(以MySQL为例)
目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 ( ...
- JDBC进行简单的增删改查
一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 (3)insert (4)up ...
- 通过JDBC进行简单的增删改查(二)
本章笔记更易理解和学习,也是我第一次初学的笔记. package javastudy; import java.sql.Connection; import java.sql.DriverManage ...
- jdbc实现简单的增删改查
先是Book类. 略 然后一个主页,写一个表单,提交Book的信息到AddBook. 略 AddBook.jsp连接jdbc,并向Book表插入. <%@ page language=" ...
- JDBC实现最简单的增删改查
好久没写博客了,今天刚进入一家公司实习,在实习这段期间想把自己所学的东西通过博客记录下来 今天上午简单回顾了一下用JDBC实现最简单的增删改查 废话不多说,接下来就说明怎么用JDBC实现最简单的增删改 ...
- 使用JDBC分别利用Statement和PreparedStatement来对MySQL数据库进行简单的增删改查以及SQL注入的原理
一.MySQL数据库的下载及安装 https://www.mysql.com/ 点击DOWNLOADS,拉到页面底部,找到MySQL Community(GPL)Downloads,点击 选择下图中的 ...
随机推荐
- 「ZJOI2007」「LuoguP1169」棋盘制作(并查集
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8×88 \times 88×8大小的黑白相间的方阵,对应八八六十四卦 ...
- 一个轻量级AOP的实现(开源)
事先声明,本项目参考AOP in C#和园内大神张逸的文章,思路神马的都不是自己的! 为了让项目的代码看起来更干净,需要一个AOP! 于是就实现了一个非常简单的,非常轻量级,有多轻量级呢? 实现的AO ...
- Notice:Array to string conversion的问题
如果后台或者前端输出这样的提示: Notice: Array to string conversion 原因是:用 echo 来输出数组,当然会报错,数组应该用print , print_r , 或 ...
- nodejs 循环的陷阱
Node.js 的异步机制由事件和回调函数实现,一开始接触可能会感觉违反常规,但习惯 以后就会发现还是很简单的.然而这之中其实暗藏了不少陷阱,一个很容易遇到的问题就是 循环中的回调函数,初学者经常容易 ...
- Kafka入门之生产者消费者测试
目录: kafka启动脚本以及关闭脚本 1. 同一个生产者同一个Topic,两个相同的消费者相同的Group 2. 同一个生产者同一个Topic,两个消费者不同Group 3. 两个生产者同一个Top ...
- Flutter实战视频-移动电商-36.FlutterToast插件使用
36.FlutterToast插件使用 https://github.com/PonnamKarthik/FlutterToast fluttertoast: ^ category_page.dart ...
- vue key值的重复键问题报错
1.问题描述:在vue2.0+ 中做一个公用的评论组件,:key使用的时创建评论的时间,当加载更多的时候,会报错: Duplicate keys detected: '2019-01-24T07:15 ...
- 51nod 1051【基础】
思路: 找题4级做做...然后找了题最水的.. = =感动...居然是一下子[记]得了做法... dp一下,枚举列的起点和终点,然后求和这一段,然后对这一大列就是求个最大字段和: #include & ...
- Lightoj1028 【数学-乘法原理】
题意: 给你一个数,问你有多少种进制对n的表示,存在后导零: 比如30:用3进制表示: 1010 思路: 我们发现,就是一个数的约数就能对n表示最后存在后导零: 计算[2 ,n]之间的n的约数个数. ...
- jzoj5986. 【WC2019模拟2019.1.4】立体几何题 (权值线段树)
传送门 题面 题解 不难看出每个点的大小为行列限制中较小的那一个(因为数据保证有解) 对于行的每个限制,能取到的个数是列里限制大于等于它的数的个数,同理,对于列是行里大于它的个数(这里没有等于,为了避 ...