您的位置:首页 > 编程语言 > Java开发

Java_JDBC_MySQL学习笔记

2017-03-09 23:37 344 查看
参考资料:

1、马士兵_JDBC_MySQL简明教程_简单BBS项目课堂实录视频教程

2、传智播客视频2015_33期

环境:Eclipse Java EE IDE (Neon) + MySQL 5.7

一、MySQL安装

http://jingyan.baidu.com/article/7e440953d6f0702fc1e2ef61.html 基本上就是一路next;奇怪的是视频里边提到需要特别注意默认编码的设置,我居然没有看到,不管了,不影响使用;

MySQL安装完后自动运行的是



二、MySQL入门

MySQL的基本语法可以参考《MySQL中文手册.chm》或者 官网文档https://dev.mysql.com/doc/refman/5.7/en/tutorial.html(其实语法看一下就知道怎么回事了,比较固定)

使用流程:创建数据库-》选择数据库-》创建表-》增/删/改/查数据

数据库存储结构:数据库、表、数据(一个数据库可以包含多张表,一张表包含多个数据)

[记得在使用XAMPP的时候,创建数据库有专门的工具,非常便捷,SQL语法都可以不用的哈,只是不太清楚Java Web以后会不会也很便捷]

相关工具:

1. 命令行——比较难用,不过想想linux下边也是这样子,暂且忍着

2. MySQL workbench

3. SQLyog

[注意的是:2跟3里边运行时,运行的是鼠标选中的语句;]





实例:

-- 1.创建数据库
create database db_test;
-- 2.选择数据库
use db_test;
-- 3.创建表
create table teacher(
tid int,
tname varchar(20),
tage int,
temail varchar(20)
);
-- 查看表
desc teacher;
-- 4.增/删数据
-- 插入所有字段,按次序插入
insert into teacher values(1,'San Zhang',20,'sz@');
insert into teacher values(2,'Si Li',25,'sl@');
insert into teacher values(3,'Er Wang',26,'ew@');
insert into teacher values(4,'Zi Ma',35,'zm@');
insert into teacher values(5,'Feng Shun',40,'fs@');
insert into teacher values(6,'Cha Niu',40,'cn@');
insert into teacher values(7,'San Zhang',35,'sz1@');

-- 查询数据
select * from teacher;


三、JDBC之MySQL

其实实例可以参考安装完MySQL后的《connector-j.pdf》——通过查找 “com.mysql.jdbc.Driver”很容易就找到实例所在位置

1)实例一:简单连接以及测试

import java.sql.*;

/***
*
* @连接MySQL数据库
*
*/
public class TestMysql {
//URL里边的db_test是MySQL里边的一个数据库名称
private static String URL = "jdbc:mysql:loadbalance://" +
"localhost:3306,localhost:3310/db_test?" +
"loadBalanceConnectionGroup=first&loadBalanceEnableJMX=true&useSSL=true";

public static void main(String[] args) {
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;

try{
Class.forName("com.mysql.jdbc.Driver");

//URL,账号,密码
conn=DriverManager.getConnection(URL, "root", "mysql_1005");
stmt=conn.createStatement();
rs=stmt.executeQuery("select * from teacher");//查询数据
while(rs.next()){
System.out.println(rs.getString("tname"));
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
System.out.println("SQLException: "+e.getMessage());
System.out.println("SQLState: "+e.getSQLState());
System.out.println("VendorError: "+e.getErrorCode());
}finally{
try {
if(rs!=null){
rs.close();//关闭
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
if(conn!=null){
conn.close();
conn=null;
}
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}

}


中途遇到的问题:

Java使用MySQL-jdbc连接MySQL出现如下警告:

Establishing SSL connection without server’s identity verification is not recommended. According to MySQL 5.5.45+,
5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to ‘false’. You need either to explicitly disable
SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

原因是MySQL在高版本需要指明是否进行SSL连接。解决方案如下:

在mysql连接字符串url中加入ssl=true或者false即可,如下所示。

url=jdbc:mysql://127.0.0.1:3306/framework?characterEncoding=utf8&useSSL=true

解决办法见:http://www.mikel.cn/%E5%BC%80%E5%8F%91%E7%AC%94%E8%AE%B0/%E6%95%B0%E6%8D%AE%E5%BA%93/java%E8%BF%9E%E6%8E%A5mysql%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AD%A6%E5%91%8A%EF%BC%9Aestablishing-ssl-connection-without-servers-identity-verification-is-not-recommend-%E6%B8%B4%E6%9C%9B%EF%BC%8C.html

2)Eclipse配置SQL Explorer插件

参考:http://blog.csdn.net/kinmet2010/article/details/5864046   或者   http://blog.csdn.net/tjzhaomengyi/article/details/51191836
实现步骤:
    1.eclipse版本:3.2及以上
    2.自动添加插件  help  -----  software  updates   ----  addsite   http://eclipsesql.sourceforge.net/
    3.window---preferences --- SQL  Explorer  ----JDBC  Driver  ----配置相关的数据库设置
       添加数据库jar文件后  list Driver  ok 
    4.打开 试图 show  view   ------- SQL  Explorer   connections  
    5.新建一个数据库连接
    6.新建sql脚本文件   用sql  Editor方式打开
配置和使用:

重启Eclipse,打开SQL Explore的视图(perspective)



a)新打开后左侧的SQL Explorer的View是空白,因为没有配置数据库驱动
【Connections视图通过 Window- >Show View-->other...添加】



b)配置JDBC,
在Connections的view打开Create New Connection Profile按钮



出现Create New Connection的Dialog



c)点击上图中Add/Edit Drivers按钮进入数据库驱动,如下图


左侧图是打开之后,可以选择Add添加一个自定义的连接,也可以在原有的进行Edit,我们选择Add添加一个名字叫MySQLDriver的驱动,在Extra Class Path子栏点击Add JARs,选择之前下载好的JDBC的JAR包,Driver Class Name就叫做com.mysql.jdbc.Driver,Example URL设置成jdbc:mysql://localhost/,这里我没有设置端口号,默认应该看来就是3306,如果需要配置端口号的可以看些其他的默认配置的写法,有这样JDBC驱动就搞定了。
d)回到Connection子栏view的Create New Connection对话框,创建一个名字叫MySQL,驱动选择我们刚配置过的MySQLDriver数据库驱动,这里数据库的URL会自动跟上MySQLDriver配置好的URL,选择用户为root。OK~



ok后,在connection视图中就可以看到我们连的结果了



上图中右键MySQL选择Connect



默认大家之前配置好本地的MySQL,填写下密码,然后在Eclipse右侧看到视图Database Structure,root用户下的sql就显示出来了,很简单的配置过程,我可以继续看hibernate去了



最终所得MySQL某一数据库属性 ^_^



实例(bbs数据库_马士兵):



import java.sql.*;
/*
* bbs实例
*/
public class ArticleTree {
//URL里边的bbs是MySQL里边的一个数据库名称
private static String URL = "jdbc:mysql:loadbalance://" +
"localhost:3306,localhost:3310/bbs?" +
"loadBalanceConnectionGroup=first&loadBalanceEnableJMX=true&useSSL=true";

public static void main(String[] args) {
new ArticleTree().show();
}

public void show(){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
Class.forName("com.mysql.jdbc.Driver");

//URL,账号,密码
conn=DriverManager.getConnection(URL, "root", "mysql_1005");
stmt=conn.createStatement();
rs=stmt.executeQuery("select * from article where pid=0");
while(rs.next()){
System.out.println(rs.getString("cont"));
tree(conn, rs.getInt("id"), 1);
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(conn!=null){
conn.close();
conn=null;
}
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
}catch(SQLException e){
e.printStackTrace();
}
}
}

//参数:SQL连接、ID、层次
private void tree(Connection conn, int id, int level){
Statement stmt=null;
ResultSet rs=null;

StringBuffer strPre=new StringBuffer("");
for(int i=0;i<level;i++){
strPre.append("    ");//前导字符串
}

try{
stmt=conn.createStatement();
String sql="select * from article where pid="+id;
rs=stmt.executeQuery(sql);
while(rs.next()){
System.out.println(strPre+rs.getString("cont"));
if(rs.getInt("isleaf")!=0){//假如不是叶子节点
tree(conn, rs.getInt("id"), level+1);
}
}
strPre.setLength(0);;//清空
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
}catch(SQLException e){
e.printStackTrace();
}

}

}
}
输出结果:

蚂蚁大战大象
大象被打趴下了
蚂蚁也不好过
瞎说
没有瞎说
大象进医院了
护士是蚂蚁
怎么可能
怎么没有可能
可能性是很大的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: