jdbc 之 mysql
- 格式:docx
- 大小:138.12 KB
- 文档页数:30
◆mysql 介绍(1)mysql数据库是瑞典AB 开发(2)mysql->sun->oracle(3)mysql数据库的特点1.开源2.免费3.跨平台(windows / linux /unix /苹果)4.处理并发性(13000个)/安全/稳定5.该数据库轻(对资源要求不高.) 安装文件37.7m ,而且对cpu / 内存要求不高.◆安装和配置1.一般说,一台机器装一个mysql.2.安装和配置过程见mysql安装图解◆mysql 使用1.可以使用window dos 登录到mysql数据库.基本语法在dos 下输入mysql –u 用户名-p密码特别说明: -p 后面的密码不要有空格/ 使用该命令的时候,需要配置一下环境变量.2.mysql数据库也提供图形化界面来登录mysql数据库演示:3.如何在mysql中创建数据库基本语法create database 数据库名•创建一个名称为mydb1的数据库。
create database mydb1; 【sql】•创建一个使用utf-8字符集的mydb2数据库。
create database mydb2 character set utf8•创建一个使用utf-8字符集,并带校对规则的mydb3数据库create database mydb3 character set utf8 collate utf8_general_ci;◆mysql的一些常用指令①如何查看,创建数据库的指令:show create databse 数据库名;②显示数据库指令show databases;③查看创建数据库的指令show create database 数据名;④删除数据库:drop database 数据库名⑤如何指定使用某个数据库use 数据库名;⑥如何备份和恢复数据库.mysqldump –u 用户名–p密码数据名> 存放路径该指令,需要在dos控制台下直接执行恢复数据库:1.创建一个数据库mydb2 ,但是这个数据库目前是空.e 数据名3.在mysql 控制台下使用source 备份文件路径◆创建表基本语法案例 :创建一张用户表create table users (id int ,name varchar(64),pwd varchar(64),birthday date)◆mysql数据类型(重点)①数值型:1. bit(m) m默认为1 最大64案例create table test1 (id bit(1)); ---//这里显示乱码?2. tinyint [unsigned] 如果是有符号则表示-128 到127 ,如果是无符号0-255案例create table test3(num tinyint) -- -128 到127create table test4(num tinyint unsigned)0 --- 2554.smallintsamllint 是两个字节表示的.带符号是负的2的15次方到2的15次方-1 ,无符号2的16方-1其它的数值类型,见下图即可6.floatFLOAT[(M,D)] [UNSIGNED] 是定长m :表示有效位d: 表示小数点有几位案例:create table test5( num float);create table test6(num float(5,1));7. double其用法和float 类似,只是表示的范围更大,也是定长8. numeric(m,d)用于表示小数,或者整数create table test7 (num numeric); //这样其实就是可以存放整数.create table test8 (num numeric(5,2));//这样就可以表示有效为5,小数点有两位的数②字串类型一览图:常用的有(1)char(m)m 范围是0-255, 定长.char(20) 如果你存放‘abc’字串,实际在表‘abc ’;案例:create table test11 (name char(20));☞小技巧:mysql 自带的client 默认支持utf8 码,所有我们在添加中文的时候,需要设置让client支持gbk* show variables like ‘char%’; //显示关于字符的设置参数* set character_set_client=gbk; //可以存中文* set character_set_results=gbk; //可以看中文(2)varchar(m)m 表示大小,范围0-65535,变长varchar(20) 如果你存放‘abc’字串,实际在表‘abc’;案例省略...建议: 如果表的某列长度固定,比如产品编号..学号. .. 而且在255内,我们应当使用char ,如果长度不能取得,或者长度大于255 小于65535 则使用varchar(3)text该类型,可以表示更大的字串.③日期类型(1)date日期(年-月-日)create table test12(birthday date);对于date 只保存年-月-日(2)datetime日期时间类型create table test13(hiredate datetime);(3)timestamp邮戳:该类型可以保存年-月-日: 时:分:秒它和datetime 最大的区别是,当你update 某条记录的时候,该列值,最自动更新create table test14 (name varchar(64) , sal float, hiredate1 timestamp, hiredate2 datetime);建议: 如果不知道该不该用timestamp ,就不要用.创建表综合案例create table emp(id int,name varchar(64),sex char(2),birthday date,Entry_date date,job varchar(32),salary float,resume text)修改表结构案例:•在上面员工表的基本上增加一个image列。
jdbc mysql8连接参数在使用Java数据库连接(JDBC)时,如果需要连接MySQL8数据库,需要特别注意连接参数的设置。
以下是连接MySQL8数据库时需要注意的连接参数:1. 驱动名:com.mysql.cj.jdbc.Driver2. URL格式:jdbc:mysql://<host>:<port>/<database_name>?characterEncodin g=utf8&useSSL=false&serverTimezone=UTC其中,<host>:MySQL服务器的主机名或IP地址。
<port>:MySQL服务器的端口号,一般为3306。
<database_name>:要连接的数据库的名称。
characterEncoding=utf8:设置字符集为UTF-8,以避免中文乱码问题。
useSSL=false:关闭SSL连接,避免出现证书错误。
serverTimezone=UTC:设置时区为UTC,避免出现时区不一致的问题。
3. 用户名和密码:连接MySQL8数据库时,建议使用MySQL 8.0以上版本的加密方式,即使用caching_sha2_password加密方式,而不是以前的mysql_native_password加密方式。
在使用caching_sha2_password加密方式时,需要使用以下连接参数:user=<username>&password=<password>&useUnicode=true&useJDBC CompliantTimezoneShift=true&useLegacyDatetimeCode=false&ser verTimezone=UTC&nullCatalogMeansCurrent=true&authentication Plugins=mysql_native_password, caching_sha2_password 其中,<username>:MySQL数据库的用户名。
JDBC连接MySQL经典方案最近在学习数据库开发的一些实例,这里浅谈一下用JDBC连接数据库MySQL(当然也可以连接SQL Sever或Oracle了,只是我更喜欢开源软件,同时也更简单)。
首先正确安装好MySQL,建立好数据库studentinfomysql>create database studentinfo;然后编写java代码,ConnectToMySQL.javaimport java.sql.*;public class ConnectToMySQL {public static Connection getConnection() throws SQLException ,ng.ClassNotFoundException{String url = "jdbc:mysql://localhost:3306/studentinfo";Class.forName("com.mysql.jdbc.Driver");String userName = "root";String password = "";Connection con = DriverManager.getConnection(url,userName,password); return con;}public static void main(String[] args) {try{Connection con = getConnection();Statement sql = con.createStatement();sql.execute("drop table if exists student");sql.execute("create table student(id int not null auto_increment,name varchar(20) not null default 'name',math int not null default 60,primary key(id));");sql.execute("insert student values(1,'AAA','99')");sql.execute("insert student values(2,'BBB','77')");sql.execute("insert student values(3,'CCC','65')");String query = "select * from student";ResultSet result = sql.executeQuery(query);System.out.println("Student表数据如下:");System.out.println("---------------------------------");System.out.println("学号"+" "+"姓名"+" "+"数学成绩");System.out.println("---------------------------------");int number;String name;String math;while(result.next()){number = result.getInt("id");name = result.getString("name");math = result.getString("math");System.out.println(number + " " + name + " " + math);}sql.close();con.close();}catch(ng.ClassNotFoundException e){System.err.println("ClassNotFoundException:" + e.getMessage()); }catch(SQLException ex){System.err.println("SQLException:" + ex.getMessage());}}}要注意的是使用MySQL数据库,需要用到对应的JDBC驱动程序mysql-connector-java-5.0.3import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.ResultSet;import java.sql.Statement;import java.sql.*;public class BaseConnection {private Connection con = null;protected Connection getCon(){ResultSet rs=null;Statement stmt = null;try {Class.forName("org.gjt.mm.mysql.Driver");String url="jdbc:mysql://192.168.0.10/数据库名?user=USR&password=PWD";conn = DriverManager.getConnection(url);stmt = conn.createStatem ent();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return con;}}1.把 mysql-connector-java-5.0.3-bin.jar放到%JAVA_HOME%\jre\lib\ext下2.访问类:package mysqldb;import java.sql.*;public class MysqlCon {private static String DriverName = "org.gjt.mm.mysql.Driver";private String dbURL = "jdbc:mysql://localhost/test";private String dbuser = "root";private String dbpassword = "";private Connection conn;private Statement stmt;private ResultSet rs;public MysqlCon(){try {Class.forName(DriverName).newInstance();conn = DriverManager.getConnection(dbURL,dbuser,dbpassword);stmt = conn.createStatement();String sql = "select * from worker";rs = stmt.executeQuery(sql);while(rs.next()){System.out.println(rs.getString(1));}} catch (InstantiationException e) {// TODO 自动生成catch 块e.printStackTrace();} catch (IllegalAccessException e) {// TODO 自动生成catch 块e.printStackTrace();} catch (ClassNotFoundException e) {// TODO 自动生成catch 块e.printStackTrace();} catch (SQLException e) {// TODO 自动生成catch 块e.printStackTrace();}}}package interphase;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Vector;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.table.AbstractTableModel;import mysqldb.MysqlCon;public class ShowRS {private AbstractTableModel atm;private JTable jtable;private Vector vector;private JScrollPane jsp;private String title[]={"职工号","职工名","性别","出生日期","工资"}; private MysqlCon mysqlcon;private JFrame frame;public ShowRS(){vector = new Vector();atm = new AbstractTableModel(){public int getColumnCount() {return title.length;}public int getRowCount() {return vector.size();}public Object getValueAt(int rowIndex, int columnIndex) {if(!vector.isEmpty())return ((Vector)vector.elementAt(rowIndex)).elementAt(columnIndex); elsereturn null;}//取得单元格中的属性值public String getColumnName(int columnIndex){return title[columnIndex];}//数据模型不可编辑,该方法设置为空public void setValueAt(){}//取得列所属对象类public Class getCoumnClass(int c){return getValueAt(0,c).getClass();}//设置单元格不可编辑,为缺省实现public boolean isCellEditable(int row,int column){return false;}};jtable = new JTable(atm);jtable.setToolTipText("显示全部查询结果");jtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);jtable.setCellSelectionEnabled(false);jtable.setShowVerticalLines(true);jtable.setShowHorizontalLines(true);jsp = new JScrollPane(jtable);mysqlcon = new MysqlCon();vector.removeAllElements();atm.fireTableDataChanged();try {ResultSet rs = mysqlcon.getResultSet();while(rs.next()){Vector rec_vector = new Vector();rec_vector.addElement(rs.getString(1));rec_vector.addElement(rs.getString(2));rec_vector.addElement(rs.getString(3));rec_vector.addElement(rs.getDate(4));rec_vector.addElement(new Float(rs.getFloat(5)));vector.addElement(rec_vector);}} catch (SQLException e) {// TODO 自动生成catch 块e.printStackTrace();}atm.fireTableDataChanged();frame = new JFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.add(jsp);frame.setSize(400,300);frame.setVisible(true);}}教程由JAVA中文网整理校对发布()JDBC连接MySQL加载及注册JDBC驱动程序Class.forName("com.mysql.jdbc.Driver");Class.forName("com.mysql.jdbc.Driver").newInstance();JDBC URL 定义驱动程序与数据源之间的连接标准语法:<protocol(主要通讯协议)>:<subprotocol(次要通讯协议,即驱动程序名称)>:<data source identifier(数据源)>MySQL的JDBC URL格式:jdbc:mysql//[hostname][:port]/[dbname][?param1=value1][¶m2=value2 ]….示例:jdbc:mysql://localhost:3306/sample_db?user=root&password=your_passwor d常见参数:user 用户名password 密码autoReconnect 联机失败,是否重新联机(true/false)maxReconnect 尝试重新联机次数initialTimeout 尝试重新联机间隔maxRows 传回最大行数useUnicode 是否使用Unicode字体编码(true/false)characterEncoding 何种编码(GB2312/UTF-8/…)relaxAutocommit 是否自动提交(true/false)capitalizeTypeNames 数据定义的名称以大写表示建立连接对象Stringurl="jdbc:mysql://localhost:3306/sample_db?user=root&password=your_pa ssword";Connection con = DriverManager.getConnection(url);建立SQL陈述式对象(Statement Object)Statement stmt = con.createStatement();执行SQL语句executeQuery()String query = "select * from test";ResultSet rs=stmt.executeQuery(query);结果集ResultSetwhile(rs.next()){rs.getString(1);rs.getInt(2);}executeUpdate()String upd="insert into test (id,name) values(1001,xuzhaori)";int con=stmt.executeUpdate(upd);execute()示例:try{}catch(SQLException sqle){}finally{}Java类型和SQL类型技术手册P421PreparedStatement(预编语句)PreparedStatement stmt = conn.prepareStatement("insert into test(id,name)values(?,?)");stmt.setInt(1,id);stmt.setString(2,name);注:一旦设定语句的参数值后,就可以多次执行改语句,直到调用clearParameters()方法将他清除为止CallableStatement(预储程序)技术手册P430JDBC2.0使用ResultSet对象中的光标上下自由移动Statement stmt = con.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);ResultSet rs=stmt.executeQuery("select * from test");public Statement createStatement(int resultSetType,int resultSetConcuttency) throws SQLExceptionresultSetTypeTYPE_FORWARD_ONLY 只能使用next()方法。
jdbc使⽤DataSource连接mysql,postgresql,oracle的代码jdbc连接数据库,使⽤DataSource是推荐的⽅式(jdbc驱动是当然要放进classpath⾥的,官⽹⼀般都有下载)1import java.sql.Connection;2import java.sql.ResultSet;3import java.sql.ResultSetMetaData;4import java.sql.SQLException;5import java.sql.Statement;67import org.postgresql.ds.PGSimpleDataSource;89import oracle.jdbc.pool.OracleDataSource;1011import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;1213public class DBConnection {1415/**16 * @param args17 * @throws SQLException18*/19public static void main(String[] args) throws SQLException {20// TODO Auto-generated method stub21 MysqlDataSource mysqlDataSource = new MysqlDataSource();22// mysqlDataSource.setPassword("dev");23// mysqlDataSource.setUser("dev");24 mysqlDataSource25 .setURL("jdbc:mysql://localhost/forJava?user=dev&password=dev");26 Connection conn = mysqlDataSource.getConnection();27 Statement stmt = conn.createStatement();28 stmt.executeUpdate("create table if not exists web\n" + "(\n"29 + " id int not null primary key,\n" + " name varchar(100),\n"30 + " created timestamp,\n" + " content blob\n" + ");\n" + "");31for (int i = 0; i < 1; i++) {32 stmt.executeUpdate("insert into web (name,content) values ('HL','frgertrhrtnthtohioh')");33 }34 showResultSet(stmt.executeQuery("select * from web limit 10"));3536// Driver driver = new com.mysql.jdbc.Driver();37// driver.connect("jdbc:mysql://localhost/forJava?user=dev&password=dev",38// null);3940 PGSimpleDataSource pgSimpleDataSource = new PGSimpleDataSource();41 pgSimpleDataSource.setServerName("localhost");42 pgSimpleDataSource.setDatabaseName("dev");43 pgSimpleDataSource.setUser("dev");44 pgSimpleDataSource.setPassword("dev");45 conn = pgSimpleDataSource.getConnection();46// conn =47// DriverManager.getConnection("jdbc:postgresql://localhost/test",48// "dev", "dev");49 showResultSet(conn.createStatement().executeQuery("select * from cities"));5051 OracleDataSource oraDataSource = new OracleDataSource();52// oraDataSource.setServerName("127.0.0.1");53// oraDataSource.setDatabaseName("HR");54// oraDataSource.setUser("HR");55// oraDataSource.setPassword("HR");56 oraDataSource.setURL("jdbc:oracle:thin:hr/hr@//localhost:1521/XE");57 conn = oraDataSource.getConnection();58 stmt = conn.createStatement();59 stmt.execute("select * from tab");60 showResultSet(stmt.getResultSet());61 stmt.execute("select * from jobs");62 showResultSet(stmt.getResultSet());63 stmt.execute("select * from DEPARTMENTS");64 showResultSet(stmt.getResultSet());65 }6667static void showResultSet(ResultSet resultSet) throws SQLException {68 ResultSetMetaData resultSetMetaData = resultSet.getMetaData();69int num = resultSetMetaData.getColumnCount();70while (resultSet.next()) {71for (int i = 1; i <= num; i++) {72 System.out.print(resultSetMetaData.getCatalogName(i) + " "73 + resultSet.getString(i));74 }75 System.out.println();76 }77 }}78java.sql.ResultSet;importjava.sql.ResultSetMetaD呃,在⾃⼰电脑上同时安装了mysql, postgresql,oracle,db2,sqlite的⼈是不是很蛋疼?ata;importjava.sql.SQLException;importjava.sql.Statement;importorg.postgresql.ds.PGSimpleDataSource;importoracle.jdbc.pool.OracleDataSource;importcom.mysql.jdbc.jdbc2.optional.MysqlDataSource;public classDBConnection {/*** @param args* @throwsSQLException*/public static voidmain(String[] args)throws SQLException {// TODO Auto-generatedmethod stubMysqlDataSourcemysqlDataSource = newMysqlDataSource();//mysqlDataSource.setPassword("dev");//mysqlDataSource.setUser("dev");mysqlDataSource.setURL("jdbc:mysql://localhost/forJava?user=dev&password=dev");Connection conn =mysqlDataSource.getConnection();Statement stmt =conn.createStatement();stmt.executeUpdate("create table if not existsweb\n" + "(\n"+ " id int not nullprimary key,\n" + " name。
jdbc mysql on duplicate key 累加在MySQL中,使用JDBC(Java Database Connectivity)进行操作时,如果你想在遇到唯一键冲突时进行累加操作,可以使用`PreparedStatement`对象的`setInt`方法来设置参数,并使用`addUpdateCountListener`方法来监听更新计数。
以下是一个示例代码片段,假设你有一个名为`test`的表,其中有一个名为`id`的唯一键,你想在遇到唯一键冲突时将另一个字段`num`的值累加:```javaimport java.sql.*;import com.mysql.jdbc.jdbc2.optional.*;public class JdbcMysqlOnDuplicateKey累加示例 {public static void main(String[] args) throws Exception {// 创建数据库连接Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/testdb", "user", "password");// 创建PreparedStatement对象String sql = "INSERT INTO test (id, num) VALUES (?, ?) ON DUPLICATE KEY UPDATE num=num+?";PreparedStatement pstmt = conn.prepareStatement(sql);// 设置参数pstmt.setInt(1, 1); // id值为1pstmt.setInt(2, 10); // num值为10pstmt.setInt(3, 10); // 累加值为10// 执行插入操作int rowsInserted = pstmt.executeUpdate();System.out.println(rowsInserted + " rows inserted.");// 关闭连接和PreparedStatement对象pstmt.close();conn.close();}}```在这个示例中,我们使用了`PreparedStatement`对象的`setInt`方法来设置参数,并使用`ON DUPLICATE KEY UPDATE`子句来指定在遇到唯一键冲突时要进行的操作。
mysql jdbc连接参数MySQL JDBC是一个Java数据库连接工具,用于在Java程序中连接和操作MySQL数据库。
在使用MySQL JDBC连接MySQL数据库时,需要设置一些连接参数,以确保成功连接到数据库并执行所需的操作。
以下是MySQL JDBC连接参数的参考内容:1. 驱动类名(driverClassName):指定驱动程序的名称,以加载相应的驱动类。
对于MySQL JDBC,驱动类名为com.mysql.jdbc.Driver。
2. URL(url):指定要连接的数据库的URL。
MySQL的URL格式为:jdbc:mysql://[host][:port]/[database],其中,[host]为数据库服务器的主机名或IP地址,[:port]为数据库服务器的端口号,默认为3306,[database]为要连接的数据库的名称。
3. 用户名(username):指定连接数据库所使用的用户名。
4. 密码(password):指定连接数据库所使用的密码。
5. 自动重连(autoReconnect):指定是否在连接断开时自动重新连接到数据库。
可以设置为true或false,默认为false。
6. 字符编码(characterEncoding):指定与数据库进行通信时使用的字符编码。
对于MySQL,常用的字符编码包括UTF-8、GBK等。
7. 最大连接数(maxConnections):指定连接池中允许的最大连接数。
连接池是一种管理数据库连接的机制,可以避免频繁地创建和关闭数据库连接。
8. 连接超时(timeout):指定连接到数据库的超时时间,单位为秒。
如果连接无法在指定的时间内建立,则会抛出连接超时的异常。
9. 批处理(batchSize):指定每次批量操作中的最大操作数。
批处理是一种将多个操作打包处理的机制,可以提高数据库操作的效率。
10. 自动提交(autoCommit):指定是否自动提交每个SQL语句的结果。
本次预计讲解的知识点:1、JDBC分类,并使用JDBC连接Mysqle操作2、JDBC主要接口的使用没,并可以利用这些接口完成数据的操作3、事务处理4、批处理的使用JDBC简介(理解)JDBC(Java DataBase Connective)Java的数据库连接,JDBC本身提供的是一套与平台无关的数据库的操作标准。
所以在整个JDBC中充斥着大量的操作接口。
而且JDBC本身不是技术,而是一种服务。
由于JDBC 本身属于一个标准,所以一个数据库如果希望使用Java 进行程序开发的话,那么各个数据库的生产商必须实现这些标准——提供专门的数据库的操作包。
根据JDBC操作方式的不同,一共有以下三种常见形式:·JDBC-ODBC桥连接:利用微软的ODBC技术进行操作|- 操作过程:程序->JDBC--->ODBC--->数据库|- 此方式属于Java默认支持的方式,但是由于其中间加入了ODBC端,所以性能很差·JDBC连接:使用各个数据库生产商提供的数据库驱动程序|- 操作过程:程序--->JDBC---> 数据库|- 由于中间缺少了ODBC环节,所以性能将有着明显的提升·JDBC网络连接:通过网络协议进行数据库的连接操作一定要记住的是,虽然JDBC-ODBC方式不被使用,但是此种操作中由于是SUN默认支持的,所以JDBC的版本是最高的,但是如果使用的是纯粹的各个数据库生产商提供的驱动程序,那么肯定不会与最新的技术同步。
如果现在使用的是Eclipse的话,则需要在Build Path中配置此驱动程序的开发包。
此时配置完成驱动程序之后,就可以通过以下的接口和类进行JDBC操作了:·类:DriverManager·接口:Connection、PreparedStatement、Statement、ResultSet1.1、JDBC操作步骤JDBC本身是一个标准,所以其操作步骤是固定的,以后只需要修改很少一部分代码就可以达到不同数据库间的连接转换功能。
JDBC连接数据库步骤及代码JDBC(Java Database Connectivity)是Java语言访问数据库的标准接口。
下面将详细介绍JDBC连接数据库的步骤及相应的代码。
步骤1:加载数据库驱动程序在使用JDBC之前,需要加载相应的数据库驱动程序。
不同的数据库有不同的驱动程序,这里以MySQL数据库为例,加载MySQL的驱动程序。
```java```步骤2:创建数据库连接通过JDBC连接数据库的核心API是java.sql.DriverManager,使用它的getConnection(方法创建一个数据库连接。
```javaConnection connection = DriverManager.getConnection(url, username, password);```其中,url是数据库的连接地址(如:"jdbc:mysql://localhost:3306/mydb"),username是数据库的用户名,password是数据库的密码。
步骤3:创建执行SQL语句的Statement对象通过数据库连接对象的createStatement(方法创建一个Statement 对象,用于执行SQL语句。
```javaStatement statement = connection.createStatement(;```步骤4:执行SQL语句可以通过Statement对象的execute(方法执行SQL语句。
例如,执行一个查询语句并将结果存储在ResultSet对象中。
```javaResultSet resultSet = statement.execute("SELECT * FROMmy_table");```步骤5:处理结果集通过ResultSet对象可以获取SQL查询的结果。
可以使用ResultSet 对象的各种get方法获取不同类型的数据。
mysql jdbc参数MySQL JDBC参数详解MySQL是一种常用的关系型数据库管理系统,而JDBC(Java Database Connectivity)是Java语言访问数据库的一种标准接口。
通过使用MySQL JDBC参数,我们可以配置和优化Java应用程序与MySQL数据库之间的连接和交互,以提高系统的性能和稳定性。
本文将详细介绍一些常用的MySQL JDBC参数,包括其作用、使用方法和常见的取值范围,帮助开发人员更好地理解和使用这些参数,从而提升数据库访问效率。
1. user(用户名)作用:指定连接数据库的用户名。
使用方法:在JDBC连接字符串中通过"user"参数指定用户名。
常见取值范围:字符串,通常为数据库管理员或拥有足够权限的用户。
2. password(密码)作用:指定连接数据库的密码。
使用方法:在JDBC连接字符串中通过"password"参数指定密码。
常见取值范围:字符串,与用户名对应的密码。
3. serverTimezone(服务器时区)作用:指定MySQL服务器所在的时区。
使用方法:在JDBC连接字符串中通过"serverTimezone"参数指定时区。
常见取值范围:字符串,如"UTC"、"GMT+8"等。
4. characterEncoding(字符编码)作用:指定数据库和应用程序之间的字符编码方式。
使用方法:在JDBC连接字符串中通过"characterEncoding"参数指定字符编码。
常见取值范围:字符串,如"UTF-8"、"GBK"等。
5. autoReconnect(自动重连)作用:指定是否在连接断开后自动重新连接数据库。
使用方法:在JDBC连接字符串中通过"autoReconnect"参数指定是否自动重连。
JDBC连接mysql乱码异常问题处理总结前段时间学习JDBC,要连接mysql获取数据。
按照⽼师的样例数据,要存⼀些名字之类的信息,⽤的都是英⽂名,我当时就不太想⽤英⽂,就把我室友的名字存了进去,嘿嘿,结果,出问题了。
连接数据库语句:static final String DB_URL = "jdbc:mysql://localhost/filemanagement";查询语句:private static final String theUserQuery = "SELECT name, password, role FROM userinfo WHERE name = ?";我是⽤我的名字做的查询,NullPointerException,很明显,没有⽤我的名字查到对应的数据,⽽数据库中是存在的。
这是为什么呢?百度到的答案是中⽂乱码,解决⽅案是,修改连接数据库语句为:static final String DB_URL = "jdbc:mysql://localhost/filemanagement?useUnicode=true&characterEncoding=GBK";重试!可以了!但这是为什么呢?那两个参数是什么?为什么加上之后就解决问题了?这两个参数解释如下:两个参数的缺省值都是false。
也就是说我们在连接mysql的时候指定了连接使⽤的字符集后,⼀切就正常了。
但我还是不太了解其中的机制,所以继续查。
原来Mysql连接进⾏查询等操作时存在⼀个字符集转换过程:1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;2. 进⾏内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定⽅法如下:• 使⽤每个数据字段的CHARACTER SET设定值;• 若上述值不存在,则使⽤对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,⾮SQL标准);• 若上述值不存在,则使⽤对应数据库的DEFAULT CHARACTER SET设定值;• 若上述值不存在,则使⽤character_set_server设定值。
mysql 介绍(1)mysql数据库是瑞典 AB 开发(2)mysql->sun->oracle(3)mysql数据库的特点1.开源2.免费3.跨平台(windows / linux /unix /苹果)4.处理并发性 (13000个)/安全/稳定5.该数据库轻(对资源要求不高.) 安装文件 37.7m ,而且对cpu / 内存要求不高.安装和配置1.一般说,一台机器装一个mysql.2.安装和配置过程见 mysql安装图解mysql 使用1.可以使用window dos 登录到mysql数据库.基本语法在dos 下输入mysql –u 用户名 -p密码特别说明: -p 后面的密码不要有空格 / 使用该命令的时候,需要配置一下环境变量.2.mysql数据库也提供图形化界面来登录mysql数据库演示:如何在mysql中创建数据库基本语法create database 数据库名•创建一个名称为mydb1的数据库。
create database mydb1; 【sql】•创建一个使用utf-8字符集的mydb2数据库。
create database mydb2 character set utf8•创建一个使用utf-8字符集,并带校对规则的mydb3数据库create database mydb3 character set utf8 collate utf8_general_ci;mysql的一些常用指令①如何查看,创建数据库的指令:show create databse 数据库名;②显示数据库指令 show databases;③查看创建数据库的指令show create database 数据名;④删除数据库:drop database 数据库名⑤如何指定使用某个数据库use 数据库名;⑥如何备份和恢复数据库.mysqldump –u 用户名–p密码数据名 > 存放路径该指令,需要在dos控制台下直接执行恢复数据库:1.创建一个数据库 mydb2 ,但是这个数据库目前是空.e 数据名3.在mysql 控制台下使用 source 备份文件路径创建表基本语法案例 :创建一张用户表create table users (id int ,name varchar(64),pwd varchar(64),birthday date)mysql数据类型(重点)①数值型:1. bit(m) m默认为 1 最大 64案例create table test1 (id bit(1)); ---//这里显示乱码?2. tinyint [unsigned] 如果是有符号则表示 -128 到 127 ,如果是无符号 0-255案例create table test3(num tinyint) -- -128 到 127create table test4(num tinyint unsigned) 0 --- 2553.smallintsamllint 是两个字节表示的.带符号是负的 2的15次方到 2的15次方-1 ,无符号 2的16方-1其它的数值类型,见下图即可6.f loatFLOAT[(M,D)] [UNSIGNED] 是定长m :表示有效位d: 表示小数点有几位案例:create table test5( num float);create table test6(num float(5,1));7. double其用法和float 类似,只是表示的范围更大,也是定长8. numeric(m,d)用于表示小数,或者整数create table test7 (num numeric); //这样其实就是可以存放整数. create table test8 (num numeric(5,2));//这样就可以表示有效为5,小数点有两位的数②字串类型一览图:常用的有(1)char(m)m 范围是 0-255, 定长.char(20) 如果你存放‘abc’字串,实际在表‘abc ’;案例:create table test11 (name char(20));☞小技巧:mysql 自带的client 默认支持 utf8 码,所有我们在添加中文的时候,需要设置让client支持gbk* show variables like ‘char%’; //显示关于字符的设置参数* set character_set_client=gbk; //可以存中文* set character_set_results=gbk; //可以看中文(2)varchar(m)m 表示大小 ,范围 0-65535,变长varchar(20) 如果你存放‘abc’字串,实际在表‘abc’;案例省略...建议: 如果表的某列长度固定,比如产品编号..学号. .. 而且在255内,我们应当使用char,如果长度不能取得,或者长度大于255 小于 65535 则使用varchar(3)text该类型,可以表示更大的字串.③日期类型(1)date日期 (年-月-日)create table test12(birthday date);对于date 只保存年-月-日(2)datetime日期时间类型create table test13(hiredate datetime);(3)timestamp邮戳:该类型可以保存年-月-日 : 时:分:秒它和datetime 最大的区别是,当你 update 某条记录的时候,该列值,最自动更新create table test14 (name varchar(64) , sal float, hiredate1 timestamp, hiredate2 datetime);建议: 如果不知道该不该用 timestamp ,就不要用.创建表综合案例create table emp( id int,name varchar(64), sex char(2), birthday date, Entry_date date, job varchar(32), salary float, resume text)修改表结构案例:•在上面员工表的基本上增加一个image列。
alter table emp add image blob;•修改job列,使其长度为60。
alter table emp modify job varchar(60);•删除sex列。
alter table emp drop sex;•表名改为user。
rename table emp to user;•修改表的字符集为utf-8alter table user character set utf8;•列名name修改为usernamealter table user change column name usernamevarchar(30);如何显示创建表的指令:show create table 表名;insert语句基本语法:●插入的数据应与字段的数据类型相同。
比如:create table test15 (name varchar(64));insert into test15 (name) values(‘aaa’);insert into test15 (name) values(34);create table test16 (age int);insert into test16 (age) values(34);insert into test16 (age) values(‘aaa’);(错)insert into test16 (age) values(‘111’);(虽然ok,但是不是好的写法.)●数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
●在values中列出的数据位置必须与被加入的列的排列位置相对应。
create table test17 (id int ,name varchar(64));insert into test17 (id,name) values(3,’aaa’);insert into test17 (name,id) values(’aaa’,3);●字符和日期型数据应包含在单引号中。
●插入空值,不指定或insert into table value(null) update 语法基本语法:●UPDATE语法可以用新值更新原有表行中的各列。
●SET子句指示要修改哪些列和要给予哪些值。
●WHERE子句指定应更新哪些行。
如没有WHERE子句,则更新所有的行。
将所有员工薪水修改为5000元。
update employee set sal=5000;●将姓名为’zs’的员工薪水修改为3000元;update employee set sal=3000 where name=’zs’;●将wu的薪水在原有基础上增加1000元update employee set sal=sa+1000 where name=’wu’; delete语句基本语法注意:●如果不使用where子句,将删除表中所有数据。
所有要小心使用.●Delete语句不能删除某一列的值(可使用update)●使用delete语句仅删除记录,不删除表本身。
如要删除表,使用drop table语句。
●同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。
●删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,参看mysql文档。
truncate table 表名,可以删除表的记录,速度快,但不能回滚..在mysql中事务的特殊说明:(1)mysql 控制台是默认自动提交事务(dml)(2)如果我们要在控制台使用事务,应该这样●set autocommit=false;●savepoint 保存点●//操作...●rollback to 保存点.select 语句基本语法注意事项:●Select 指定查询哪些列的数据。
●column指定列名。
●*号代表查询所有列。
select * from 表名;●From指定查询哪张表。
●DISTINCT可选,指显示结果时,是否剔除重复数据select distinct * from 表名●练习:●查询表中所有学生的信息。
select * from student;●查询表中所有学生的姓名和对应的英语成绩。
select name,english from student;●过滤表中重复数据。