jdbc 连接mysql时中的URL怎么写的

jdbc 连接mysql时中的URL怎么写的,第1张

String url="jdbc:mysql://localhost:3306/sample_db?user=root&password=your_password"

例如:

import java.sql.DriverManager

import java.sql.ResultSet

import java.sql.SQLException

import java.sql.Connection

import java.sql.Statement

 

 

public class MysqlDemo {

    public static void main(String[] args) throws Exception {

        Connection conn = null

        String sql

        // MySQL的JDBC URL编写方式:jdbc:mysql://主机名称:连接端口/数据库的名称?参数=值

        // 避免中文乱码要指定useUnicode和characterEncoding

        // 执行数据库 *** 作之前要在数据库管理系统上创建一个数据库,名字自己定,

        // 下面语句之前就要先创建javademo数据库

        String url = "jdbc:mysql://localhost:3306/javademo?"

                + "user=root&password=root&useUnicode=true&characterEncoding=UTF8"

 

        try {

            // 之所以要使用下面这条语句,是因为要使用MySQL的驱动,所以我们要把它驱动起来,

            // 可以通过Class.forName把它加载进去,也可以通过初始化来驱动起来,下面三种形式都可以

            Class.forName("com.mysql.jdbc.Driver")// 动态加载mysql驱动

            // or:

            // com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver()

            // or:

            // new com.mysql.jdbc.Driver()

 

            System.out.println("成功加载MySQL驱动程序")

            // 一个Connection代表一个数据库连接

            conn = DriverManager.getConnection(url)

            // Statement里面带有很多方法,比如executeUpdate可以实现插入,更新和删除等

            Statement stmt = conn.createStatement()

            sql = "create table student(NO char(20),name varchar(20),primary key(NO))"

            int result = stmt.executeUpdate(sql)// executeUpdate语句会返回一个受影响的行数,如果返回-1就没有成功

            if (result != -1) {

                System.out.println("创建数据表成功")

                sql = "insert into student(NO,name) values('2012001','陶伟基')"

                result = stmt.executeUpdate(sql)

                sql = "insert into student(NO,name) values('2012002','周小俊')"

                result = stmt.executeUpdate(sql)

                sql = "select * from student"

                ResultSet rs = stmt.executeQuery(sql)// executeQuery会返回结果的集合,否则返回空值

                System.out.println("学号\t姓名")

                while (rs.next()) {

                    System.out

                            .println(rs.getString(1) + "\t" + rs.getString(2))// 入如果返回的是int类型可以用getInt()

                }

            }

        } catch (SQLException e) {

            System.out.println("MySQL *** 作错误")

            e.printStackTrace()

        } catch (Exception e) {

            e.printStackTrace()

        } finally {

            conn.close()

        }

 

    }

 

}

view sourceprint?

01.

DELIMITER

02.

03.

DROP FUNCTION IF EXISTS urlencode

04.

05.

DELIMITER |

06.

07.

CREATE FUNCTION urlencode (s VARCHAR(4096)) RETURNS VARCHAR(4096)08.

DETERMINISTIC

09.

CONTAINS SQL

10.

BEGIN

11.

DECLARE c VARCHAR(4096) DEFAULT ''

12.

DECLARE pointer INT DEFAULT 1

13.

DECLARE s2 VARCHAR(4096) DEFAULT ''

14.

15.

IF ISNULL(s) THEN

16.

RETURN NULL

17.

ELSE

18.

SET s2 = ''

19.

WHILE pointer <= length(s) DO

20.

SET c = MID(s,pointer,1)

21.

IF c = ' ' THEN

22.

SET c = '+'

23.

ELSEIF NOT (ASCII(c) BETWEEN 48 AND 57 OR24.

ASCII(c) BETWEEN 65 AND 90 OR

25.

ASCII(c) BETWEEN 97 AND 122) THEN

26.

SET c = concat("%",LPAD(CONV(ASCII(c),10,16),2,0))27.

END IF

28.

SET s2 = CONCAT(s2,c)

29.

SET pointer = pointer + 1

30.

END while

31.

END IF

32.

RETURN s2

33.

END

34.

|

35.

DELIMITER

view sourceprint?

01.

DROP FUNCTION IF EXISTS urldecode

02.

03.

DELIMITER |

04.

05.

CREATE FUNCTION urldecode (s VARCHAR(4096)) RETURNS VARCHAR(4096)06.

DETERMINISTIC

07.

CONTAINS SQL

08.

BEGIN

09.

DECLARE c VARCHAR(4096) DEFAULT ''

10.

DECLARE pointer INT DEFAULT 1

11.

DECLARE h CHAR(2)

12.

DECLARE h1 CHAR(1)

13.

DECLARE h2 CHAR(1)

14.

DECLARE s2 VARCHAR(4096) DEFAULT ''

15.

16.

IF ISNULL(s) THEN

17.

RETURN NULL

18.

ELSE

19.

SET s2 = ''

20.

WHILE pointer <= LENGTH(s) DO

21.

SET c = MID(s,pointer,1)

22.

IF c = '+' THEN

23.

SET c = ' '

24.

ELSEIF c = '%' AND pointer + 2 <= LENGTH(s) THEN25.

SET h1 = LOWER(MID(s,pointer+1,1))

26.

SET h2 = LOWER(MID(s,pointer+2,1))

27.

IF (h1 BETWEEN '0' AND '9' OR h1 BETWEEN 'a' AND 'f')28.

AND

29.

(h2 BETWEEN '0' AND '9' OR h2 BETWEEN 'a' AND 'f')30.

THEN

31.

SET h = CONCAT(h1,h2)

32.

SET pointer = pointer + 2

33.

SET c = CHAR(CONV(h,16,10))

34.

END IF

35.

END IF

36.

SET s2 = CONCAT(s2,c)

37.

SET pointer = pointer + 1

38.

END while

39.

END IF

40.

RETURN s2

41.

END

42.

43.

|

44.

45.

DELIMITER

当一个字符串经过多次 urlencode 处理之后,可以使用 multiurldecode来解码,它将多次调用 urldecode来解码,直到没有需要解码的字符www.it165.net

view sourceprint?

01.

DELIMITER

02.

03.

DROP FUNCTION IF EXISTS multiurldecode

04.

05.

DELIMITER |

06.

07.

CREATE FUNCTION multiurldecode (s VARCHAR(4096)) RETURNS VARCHAR(4096)08.

DETERMINISTIC

09.

CONTAINS SQL

10.

BEGIN

11.

DECLARE pr VARCHAR(4096) DEFAULT ''

12.

IF ISNULL(s) THEN

13.

RETURN NULL

14.

END IF

15.

REPEAT

16.

SET pr = s

17.

SELECT urldecode(s) INTO s

18.

UNTIL pr = s END REPEAT

19.

RETURN s

20.

END

21.

22.

|

23.

24.

DELIMITER

对于MySQL数据库的乱码问题,有两中情况:

1. mysql数据库编码问题(建库时设定)。

2. 连接mysql数据库的url编码设置问题。

对于第一个问题,目前个人发现只能通过重新建库解决,建库的时候,选择UTF-8字符集。我试过修改现有数据库字符集为UFT

-8,但是根本不起作用,插入的中文仍然乱码(中文显示成:???)。重建库时选择字符集为UTF-8之后,中文正常显示了。

对于第二个问题,是这样的情况:我建库时设置了数据库默认字符集为UTF-8,通过mysql workbench直接插入中文显示完全正常。但是使用mybaits插入数据时,中文显示成了"???"这样的乱码。但从数据库获取的中文不会乱码。跟踪数据库 *** 作,SQL语句中的中文还是显示正常的,但是插入到mysql数据库后就乱码了,于是判断可能是数据库连接的问题。后来在网上找了下资料,发现确实可以为mysql数据库的连接字符串设置编码方式,如下:

jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8

添加了useUnicode=true&characterEncoding=utf8参数之后,插入中文就正常了。

添加的作用是:指定字符的编码、解码格式。

例如:假设mysql数据库用的是GBK编码(也可能是其它,例如Ubuntu下就是latin1),而项目数据库用的是utf-8编码。这时候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下两个方面:

1. 存数据时:

数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。

2.取数据时:

在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8604903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存