Java之JDBC学习
(一),MySql数据库
1,MySql数据库的数据类型定义
2,完整性约束:
3,索引:
作用:唯一作用就是加快对表查询速度,索引通过快速路径方法访问来快速定位数据,从而减少磁盘的II/O;
缺点:维护浪费开销,存储需要一定的磁盘空间
4,数据库操作语言:
1,insert into tableName(column1,...) values(value1,...);
2,update tableName set(column1=value1...) where condition;
3,delete from tableName where condition
5,表与表之间的左外链接,右外链接,全链接,内链接区别
左外链接:保留两表所有匹配成功的的记录,和左表未匹配成功的记录,其右对应项为null;
右外链接:保留两表所有匹配成功的的记录,和右表未匹配成功的记录,其左对应项为null;
全链接:保留两表所有的的记录,不管是否匹配上,没匹配上对应项为null;
内链接:只保留链表匹配成功的记录数;
6,系统属性:
(二) JDBC操作
1,所需jar包,下载地址
2,简单的数据库JDBC操作:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties; public class ExecuteDO {
private String driver;
private String url;
private String user;
private String pswd;
//初始参数
public void initParam(String paraFile) throws FileNotFoundException, IOException{
Properties props=new Properties();
props.load(new FileInputStream(paraFile));
driver=props.getProperty("driver");
url=props.getProperty("url");
user=props.getProperty("user");
pswd=props.getProperty("pswd");
}
//定义建表语言
public void createTable(String sql) throws ClassNotFoundException{
Class.forName(driver);//加载驱动
try {
Connection conn=DriverManager.getConnection(url,user,pswd);//获取数据库连接
PreparedStatement stmt=conn.prepareStatement(sql);//创建状态对象,Prepared效率高些
stmt.executeUpdate();//执行更新数据库,创建表
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
//插入表
public void insertTable(String sql) throws ClassNotFoundException{
Class.forName(driver);
try {
Connection conn=DriverManager.getConnection(url,user,pswd);
PreparedStatement prst=conn.prepareStatement(sql);
for(int i=0;i<5;i++){//循环插入5个值
prst.setString(1, "DD"+i);//设置第三列的数值,1代表第一个?
prst.executeUpdate();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//查询结果
public void queryTable(String sql) throws ClassNotFoundException{
Class.forName(driver);
try {
Connection conn=DriverManager.getConnection(url,user,pswd);
PreparedStatement stat=conn.prepareStatement(sql);
ResultSet reset=stat.executeQuery();
while(reset.next())
System.out.println(reset.getInt(1)+"\t"+reset.getString(2)+"\t"
+reset.getString(3));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception, IOException{
ExecuteDO ed=new ExecuteDO();
//新建属性文件
Properties props=new Properties();
props.setProperty("url", "jdbc:mysql://localhost:3306/javatest");
props.setProperty("driver", "com.mysql.jdbc.Driver");
props.setProperty("user", "root");
props.setProperty("pswd", "123");
props.store(new FileOutputStream("mysql.ini"),"commen Lins");
ed.initParam("mysql.ini");
//测试建表功能,DDL
ed.createTable("create table jdbc_test(jdbc_id int auto_increment primary key,"+"jdb_name varchar(255),jdbc_desc text);");
//测试插入表结果:DML
ed.insertTable("Insert into jdbc_test(jdb_name,jdbc_desc) values('rr',?)");
//测试查询表结果:DML功能
ed.queryTable("select * from jdbc_test");
System.out.println("ok!!");
}
}
PrepareStatement和Statement区别:
1,PrepareStatement可以提高代码的可读性
2,ParperStatement提高了代码的灵活性和执行效率。
3,ParperStatement安全性更强些。
(三)事务操作
1,事务的特点
2,Connection类控制事务有:setAutoCommit()//是否自动提交;commit()//提交事务 rollback():撤销事务;查看这里
(四)使用数据库连接池操作:
c3p0 jar包:优点时:可以自己清理不再使用的Connection,Statement,ResultSet 资源下载地址
第一种连接方式(纯代码):
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class Cp3Test { private static Connection conn;
private static ComboPooledDataSource ds = new ComboPooledDataSource(); public static Connection getConnection() {
try {
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/javatest?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true");
ds.setUser("root");
ds.setPassword("123");
conn = ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
} catch (PropertyVetoException e) {
e.printStackTrace();
}
return conn;
}
public static void main(String[] args){ try {
PreparedStatement pstmt=Cp3Test.getConnection().prepareStatement("select * from jdbc_test");
ResultSet rs=pstmt.executeQuery();
while(rs.next()){
System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"
+rs.getString(3));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
第二种方式:通过在src目录下建立名为"c3p0-config.xml”的xml文件
xml文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
<default-config>
<property name="jdbcUrl">
<![CDATA[
jdbc:mysql://localhost:3306/javatest?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true
]]>
</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">123</property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement">3</property>
<!-- 初始化数据库连接池时连接的数量 -->
<property name="initialPoolSize">10</property>
<!-- 数据库连接池中的最小的数据库连接数 -->
<property name="minPoolSize">2</property>
<!-- 数据库连接池中的最大的数据库连接数 -->
<property name="maxPoolSize">10</property>
</default-config>
</c3p0-config>
调用方式如下:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class Cp3Test {
private static Connection conn;
private static ComboPooledDataSource ds = new ComboPooledDataSource(); public static Connection getConnection() {
try {
conn = ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void main(String[] args){ try {
PreparedStatement pstmt=Cp3Test.getConnection().prepareStatement("select * from jdbc_test");
ResultSet rs=pstmt.executeQuery();
while(rs.next()){
System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"
+rs.getString(3));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Java之JDBC学习的更多相关文章
- java之JDBC学习总结
以前一直以为jdbc是很高大上的东西,没想到今天学了jdbc,惊喜来了,just a tool!当然工具是用来帮助人们学习和提供方便的,所以总结了一下,也就是简单的三板斧: first :加载驱动 t ...
- java之jdbc学习——QueryRunner
jdbc是ORM框架的基础,但将数据库中的表映射到java对象,并进行增删改查,并不是一件简单的事情. 涉及到jdbc.注解和反射的一些基础知识. 以下内容来自网友的分享,并做了一些增减,作为笔记记录 ...
- Java JDBC学习实战(二): 管理结果集
在我的上一篇博客<Java JDBC学习实战(一): JDBC的基本操作>中,简要介绍了jdbc开发的基本流程,并详细介绍了Statement和PreparedStatement的使用:利 ...
- 一位资深程序员大牛给予Java初学者的学习路线建议
java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...
- 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- Java程序员学习之路
1. Java语言基础 谈到Java语 言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基 ...
- 20145304 Java第九周学习报告
20145304<Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是Java联机数据库的标准规范.定义了 ...
- 如何准备阿里社招面试,顺谈 Java 程序员学习中各阶段的建议
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- JAVA反射机制—学习总结
最近收到很多关于Java反射机制的问题留言,其实Java反射机制技术方面没有太多难点,或许是大家在学习过程中遗漏了细小知识点,导致一些问题无法彻底理解,现在我们简单的总结一下,加深印象.什么是反射机制 ...
随机推荐
- Dom的深度优先遍历和广度优先遍历
//深度优先遍历的递归写法 function DFTraversal(node) { var nodes = []; if (node != null) { nodes.push(node); var ...
- bzoj 2159 - Crash 的 文明世界
Description 给定一棵\(n\le 10^5\)的树, 和\(k\le 150\) 求每个点\(x\)的\[S(x) = \sum_{y=1}^n dis(x, y) ^ k\] Analy ...
- Topcoder SRM 604 div1题解
CTSC考完跑了过来日常TC--- Easy(250pts): 题目大意:有个机器人,一开始的位置在(0,0),第k个回合可以向四个方向移动3^k的距离(不能不动),问是否可以到达(x,y),数据满足 ...
- ACdream 1210 Chinese Girls' Amusement(高精度)
Chinese Girls' Amusement Time Limit:1000MS Memory Limit:64000KB 64bit IO Format:%lld & ...
- tortoise git使用 git版本库的rsa key来进行ssh连接
接触git以来 ,开始时用了命令行,但是命令行总归不如图形化菜单方便明了,而GIT本身自带的GUI又用的不习惯,以前用过许久的TOTORISE SVN,幸好有TORTOISE GIT,这个版本图形化工 ...
- Git 新项目关联到远程仓库
最近前端学到小有成果,准备写一个新项目放在githup,结果没有提前在仓库创建项目,现在我把写好的项目推送到远程gitHup 1.先初始化本地仓库 Git init : 这样在项目里面都创建了一个隐藏 ...
- ios 最新系统bug与解决——微信公众号中弹出键盘再收起时,原虚拟键盘位点击事件无效
最近ios发布新版本系统12.1,随着部分用户的系统更新,一些问题也渐渐暴露出来... 公司用户反映微信公众号出现了点击无效的bug!!测试调查发现,只有iphonex.iphone6,ihpone7 ...
- Zabbix监控服务器异常IP登录
保存下面的脚本到任意路径 名字.py 修改属组和权限: chown zabbix:zabbix * chmod 755 * 演示的路径为:/usr/local/zabbix/scripts/ # -* ...
- 【C语言】指针增减
int *pa = NULL; ; printf("%x\n", pb); char *pca = NULL; ; printf("%x\n", pcb); s ...
- Laravel 5.5 Blade::if 简介
Laravel 5.5 引入了一个新的黑科技,就是你可以使用 Blade::if 来进行一些简单的逻辑判断啦!想不出应用场景在哪?想象下面的场景: 判断一个用户是否是 admin 判断应用的开发环境不 ...