mysqljava查詢(java查詢資料庫)

本文目錄一覽:

mysql進行分庫之後,java里怎麼進行查詢

根據業務邏輯,自己定一個規則去選擇不同的庫存儲。比方如計算機類書籍存儲A庫中的書籍表。經濟類的書籍存儲B。最終構造一個KEY(書籍類型)- value(庫標識)。查詢時根據庫標識取出對應的數據源進行查詢。

java線程中使用mysql連接查詢資料庫

不建議這樣做,一般不符合開發規範,如果這樣的話,你想想在業務量多的情況下,多個線程如果不控制,資料庫連接會將資料庫伺服器爆掉的,會影響業務的

常規做法:資料庫連接池(durid了解一下),據某些統計哈,真正用來做查詢的資源不超過整個查詢資料庫的生命周期的30%,大部分時間都用開創建連接關閉連接等操作,如果這個時候建立資料庫連接池的話,可以有效的將這部分時間釋放掉

java mysql查詢語句怎麼寫

1:使用SHOW語句找出在伺服器上當前存在什麼資料庫:

mysql SHOW DATABASES;

2:2、創建一個資料庫MYSQLDATA

mysql CREATE DATABASE MYSQLDATA;

3:選擇你所創建的資料庫

mysql USE MYSQLDATA; (按回車鍵出現Database changed 時說明操作成功!)

4:查看現在的資料庫中存在什麼表

mysql SHOW TABLES;

5:創建一個資料庫表

mysql CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));

6:顯示錶的結構:

mysql DESCRIBE MYTABLE;

7:往表中加入記錄

mysql insert into MYTABLE values (」hyq」,」M」);

8:用文本方式將數據裝入資料庫表中(例如D:/mysql.txt)

mysql LOAD DATA LOCAL INFILE 「D:/mysql.txt」 INTO TABLE MYTABLE;

9:導入.sql文件命令(例如D:/mysql.sql)

mysqluse database;

mysqlsource d:/mysql.sql;

10:刪除表

mysqldrop TABLE MYTABLE;

11:清空表

mysqldelete from MYTABLE;

12:更新表中數據

mysqlupdate MYTABLE set sex=」f」 where name=』hyq』;

以下是無意中在網路看到的使用MySql的管理心得,

在windows中MySql以服務形式存在,在使用前應確保此服務已經啟動,未啟動可用net start mysql命令啟動。而Linux中啟動時可用「/etc/rc.d/init.d/mysqld start」命令,注意啟動者應具有管理員許可權。

剛安裝好的MySql包含一個含空密碼的root帳戶和一個匿名帳戶,這是很大的安全隱患,對於一些重要的應用我們應將安全性儘可能提高,在這裡應把匿名帳戶刪除、 root帳戶設置密碼,可用如下命令進行:

use mysql;

delete from User where User=」”;

update User set Password=PASSWORD(』newpassword』) where User=』root』;

如果要對用戶所用的登錄終端進行限制,可以更新User表中相應用戶的Host欄位,在進行了以上更改後應重新啟動資料庫服務,此時登錄時可用如下類似命令:

mysql -uroot -p;

mysql -uroot -pnewpassword;

mysql mydb -uroot -p;

mysql mydb -uroot -pnewpassword;

上面命令參數是常用參數的一部分,詳細情況可參考文檔。此處的mydb是要登錄的資料庫的名稱。

在 進行開發和實際應用中,用戶不應該只用root用戶進行連接資料庫,雖然使用root用戶進行測試時很方便,但會給系統帶來重大安全隱患,也不利於管理技 術的提高。我們給一個應用中使用的用戶賦予最恰當的資料庫許可權。如一個只進行數據插入的用戶不應賦予其刪除數據的許可權。MySql的用戶管理是通過 User表來實現的,添加新用戶常用的方法有兩個,一是在User表插入相應的數據行,同時設置相應的許可權;二是通過GRANT命令創建具有某種許可權的用戶。其中GRANT的常用用法如下:

grant all on mydb.* to NewUserName@HostName identified by 「password」 ;

grant usage on *.* to NewUserName@HostName identified by 「password」;

grant select,insert,update on mydb.* to NewUserName@HostName identified by 「password」;

grant update,delete on mydb.TestTable to NewUserName@HostName identified by 「password」;

若 要給此用戶賦予他在相應對象上的許可權的管理能力,可在GRANT後面添加WITH GRANT OPTION選項。而對於用插入User表添加的用戶,Password欄位應用PASSWORD 函數進行更新加密,以防不軌之人竊看密碼。對於那些已經不用的用戶應給予清除,許可權過界的用戶應及時回收許可權,回收許可權可以通過更新User表相應欄位, 也可以使用REVOKE操作。

下面給出本人從其它資料()獲得的對常用許可權的解釋:

全局管理許可權:

FILE: 在MySQL伺服器上讀寫文件。

PROCESS: 顯示或殺死屬於其它用戶的服務線程。

RELOAD: 重載訪問控制表,刷新日誌等。

SHUTDOWN: 關閉MySQL服務。

資料庫/數據表/數據列許可權:

ALTER: 修改已存在的數據表(例如增加/刪除列)和索引。

CREATE: 建立新的資料庫或數據表。

DELETE: 刪除表的記錄。

DROP: 刪除數據表或資料庫。

INDEX: 建立或刪除索引。

INSERT: 增加表的記錄。

SELECT: 顯示/搜索表的記錄。

UPDATE: 修改表中已存在的記錄。

特別的許可權:

ALL: 允許做任何事(和root一樣)。

USAGE: 只允許登錄–其它什麼也不允許做。

一、 簡單查詢

簡單的Transact-SQL查詢只包括選擇列表、FROM子句和WHERE子句。它們分別說明所查詢列、查詢的

表或視圖、以及搜索條件等。

例如,下面的語句查詢testtable表中姓名為「張三」的nickname欄位和email欄位。

複製內容到剪貼板

代碼:SELECT `nickname`,`email`FROM `testtable`WHERE `name`=’張三’

(一) 選擇列表

選擇列表(select_list)指出所查詢列,它可以是一組列名列表、星號、表達式、變數(包括局部變數和全局變數)等構成。

1、選擇所有列

例如,下面語句顯示testtable表中所有列的數據:

複製內容到剪貼板

代碼:SELECT * FROM testtable

2、選擇部分列並指定它們的顯示次序

查詢結果集合中數據的排列順序與選擇列表中所指定的列名排列順序相同。

例如:

複製內容到剪貼板

代碼:SELECT nickname,email FROM testtable

3、更改列標題

在選擇列表中,可重新指定列標題。定義格式為:

列標題=列名

列名 列標題

如果指定的列標題不是標準的標識符格式時,應使用引號定界符,例如,下列語句使用漢字顯示列

標題:

複製內容到剪貼板

代碼:SELECT 昵稱=nickname,電子郵件=email FROM testtable

4、刪除重複行

SELECT語句中使用ALL或DISTINCT選項來顯示錶中符合條件的所有行或刪除其中重複的數據行,默認

為ALL。使用DISTINCT選項時,對於所有重複的數據行在SELECT返回的結果集合中只保留一行。

5、限制返回的行數

使用TOP n [PERCENT]選項限制返回的數據行數,TOP n說明返回n行,而TOP n PERCENT時,說明n是

表示一百分數,指定返回的行數等於總行數的百分之幾。

例如:

複製內容到剪貼板

代碼:SELECT TOP 2 * FROM `testtable`

複製內容到剪貼板

代碼:SELECT TOP 20 PERCENT * FROM `testtable`

(二) FROM子句

FROM子句指定SELECT語句查詢及與查詢相關的表或視圖。在FROM子句中最多可指定256個表或視圖,

它們之間用逗號分隔。

在FROM子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應使用對象名限定這些列

所屬的表或視圖。例如在usertable和citytable表中同時存在cityid列,在查詢兩個表中的cityid時應

使用下面語句格式加以限定:

複製內容到剪貼板

代碼:SELECT `username`,citytable.cityid

FROM `usertable`,`citytable`

WHERE usertable.cityid=citytable.cityid在FROM子句中可用以下兩種格式為表或視圖指定別名:

複製內容到剪貼板

代碼:表名 as 別名

表名 別名例如上面語句可用表的別名格式表示為:

複製內容到剪貼板

代碼:SELECT `username`,b.cityid

FROM usertable a,citytable b

WHERE a.cityid=b.cityidSELECT不僅能從表或視圖中檢索數據,它還能夠從其它查詢語句所返回的結果集合中查詢數據。

例如:

複製內容到剪貼板

代碼:SELECT a.au_fname+a.au_lname

FROM authors a,titleauthor ta

(SELECT `title_id`,`title`

FROM `titles`

WHERE ` ytd_sales`10000

) AS t

WHERE a.au_id=ta.au_id

AND ta.title_id=t.title_id此例中,將SELECT返回的結果集合給予一別名t,然後再從中檢索數據。

(三) 使用WHERE子句設置查詢條件

WHERE子句設置查詢條件,過濾掉不需要的數據行。例如下面語句查詢年齡大於20的數據:

複製內容到剪貼板

代碼:SELECT * FROM usertable WHERE age20 WHERE子句可包括各種條件運算符:

比較運算符(大小比較):、=、=、、!、!=10 AND age複製內容到剪貼板

代碼:SELECT * FROM `usertable` ORDER BY `age` DESC,`userid` ASC另外,可以根據表達式進行排序。

二、 聯合查詢

UNION運算符可以將兩個或兩個以上上SELECT語句的查詢結果集合合併成一個結果集合顯示,即執行聯

合查詢。

UNION的語法格式為:

複製內容到剪貼板

代碼:select_statement

UNION [ALL] selectstatement

[UNION [ALL] selectstatement][…n]其中selectstatement為待聯合的SELECT查詢語句。

ALL選項表示將所有行合併到結果集合中。不指定該項時,被聯合查詢結果集合中的重複行將只保留一行。

聯合查詢時,查詢結果的列標題為第一個查詢語句的列標題。因此,要定義列標題必須在第一個查詢語

句中定義。要對聯合查詢結果排序時,也必須使用第一查詢語句中的列名、列標題或者列序號。

在使用UNION 運算符時,應保證每個聯合查詢語句的選擇列表中有相同數量的表達式,並且每個查詢選

擇表達式應具有相同的數據類型,或是可以自動將它們轉換為相同的數據類型。在自動轉換時,對於數值類

型,系統將低精度的數據類型轉換為高精度的數據類型。

在包括多個查詢的UNION語句中,其執行順序是自左至右,使用括弧可以改變這一執行順序。例如:

查詢1 UNION (查詢2 UNION 查詢3)

三、連接查詢

通過連接運算符可以實現多個表查詢。連接是關係資料庫模型的主要特點,也是它區別於其它類型資料庫管理系統的一個標誌。

在關係資料庫管理系統中,表建立時各數據之間的關係不必確定,常把一個實體的所有信息存放在

一個表中。當檢索數據時,通過連接操作查詢出存放在多個表中的不同實體的信息。連接操作給用戶帶

來很大的靈活性,他們可以在任何時候增加新的數據類型。為不同實體創建新的表,爾後通過連接進行

查詢。

連接可以在SELECT 語句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出連接時有助於

將連接操作與WHERE子句中的搜索條件區分開來。所以,在Transact-SQL中推薦使用這種方法。

SQL-92標準所定義的FROM子句的連接語法格式為:

代碼:FROM join_table join_type join_table [ON (join_condition)]其中join_table指出參與連接操作的表名,連接可以對同一個表操作,也可以對多表操作,對同一個表操作的連接又稱做自連接。

join_type 指出連接類型,可分為三種:內連接、外連接和交叉連接。

內連接(INNER JOIN)使用比較運算符進行表間某(些)列數據的比較操作,並列出這些表中與連接條件相匹配的數據行。根據所使用的比較方式不同,內連接又分為等值連接、自然連接和不等連接三種。

外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN)、右外連接(RIGHT OUTER JOIN或RIGHT JOIN)

和全外連接(FULL OUTER JOIN或FULL JOIN)三種。與內連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時)、右表(右外連接時)或兩個表(全外連接時)中所有符合搜索條件的數據行。

交叉連接(CROSS JOIN)沒有WHERE 子句,它返回連接表中所有數據行的笛卡爾積,其結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。

連接操作中的ON (join_condition) 子句指出連接條件,它由被連接表中的列和比較運算符、邏輯運算符等構成。

無論哪種連接都不能對text、ntext和image數據類型列進行直接連接,但可以對這三種列進行間接連接。例如:

代碼:SELECT p1.pub_id,p2.pub_id,p1.pr_info

FROM pub_info AS p1 INNER JOIN pub_info AS p2

ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)(一)內連接

內連接查詢操作列出與連接條件匹配的數據行,它使用比較運算符比較被連接列的列值。

內連接分三種:

1、等值連接:在連接條件中使用等於號(=)運算符比較被連接列的列值,其查詢結果中列出被連接表中的所有列,包括其中的重複列。

2、不等連接: 在連接條件使用除等於運算符以外的其它比較運算符比較被連接的列的列值。這些運算符包括、=、、!。

3、自然連接:在連接條件中使用等於(=)運算符比較被連接列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連接表中的重複列。

例,下面使用等值連接列出authors和publishers表中位於同一城市的作者和出版社:

代碼:SELECT *

FROM authors AS a INNER JOIN publishers AS p

ON a.city=p.city又如使用自然連接,在選擇列表中刪除authors 和publishers 表中重複列(city和state):

複製內容到剪貼板

代碼:SELECT a.*,p.pub_id,p.pub_name,p.country

FROM authors AS a INNER JOIN publishers AS p

ON a.city=p.city

(二)外連接內連接時,返回查詢結果集合中的僅是符合查詢條件( WHERE 搜索條件或 HAVING 條件)和連接條件

的行。而採用外連接時,它返回到查詢結果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接時)、右表(右外連接時)或兩個邊接表(全外連接)中的所有數據行。

如下面使用左外連接將論壇內容和作者信息連接起來:

代碼:SELECT a.*,b.* FROM `luntan` LEFT JOIN usertable as b

ON a.username=b.username下面使用全外連接將city表中的所有作者以及user表中的所有作者,以及他們所在的城市:

代碼:SELECT a.*,b.*

FROM city as a FULL OUTER JOIN user as b

ON a.username=b.username

(三)交叉連接

交叉連接不帶WHERE 子句,它返回被連接的兩個表所有數據行的笛卡爾積,返回到結果集合中的數

據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。

例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數將等

於6*8=48行。

代碼:SELECT `type`,`pub_name`

FROM `titles` CROSS JOIN `publishers`

ORDER BY `type`

求一個java mysql 查詢思路

其實我也沒有啥好辦法,我甚至推薦你使用樓上說的方法,直接select * 將數據全部查出後,在service中用java處理數據更加方便。

如果要強行使用sql查出來,我這裡寫了這麼一段:

首先因為是同一張表,根據不同條件將結果拼接在一起,我能想到的就是用left join,我按照不同條件將數據分成如下幾段:

a段:姓名段,作為left join的主表,只有姓名;

b段:吃了早餐段;

c段:沒吃早餐段;

d段:吃了晚餐段;

e段:沒吃晚餐段;

f段:吃了飯段;

g段:沒吃飯段。

除了a段以外,其他段都是根據自身條件

SELECT

name,

count(*)    count,

sum(weight) sum,

然後依次左連接將所有段通過姓名連接到一起,最終組成的sql語句如下:

SELECT

a.name 姓名,

ifnull(b.count, 0) 吃了早餐的次數,

ifnull(b.sum, 0)   吃了早餐的重量,

ifnull(c.count, 0) 沒吃早餐的次數,

ifnull(c.sum, 0)   沒吃早餐的重量,

ifnull(d.count, 0) 吃了晚餐的次數,

ifnull(d.sum, 0)   吃了晚餐的重量,

ifnull(e.count, 0) 沒吃晚餐的次數,

ifnull(e.sum, 0)   沒吃晚餐的重量,

ifnull(f.count, 0) 吃了飯的次數,

ifnull(f.sum, 0)   吃了飯的重量,

ifnull(g.count, 0) 沒吃飯的次數,

ifnull(g.sum, 0)   沒吃飯的重量

FROM

(SELECT DISTINCT name

FROM T) a LEFT JOIN

(SELECT

name,

count(*)    count,

sum(weight) sum

FROM T

WHERE type = 0 AND status = 0

GROUP BY name) b ON a.name = b.name

LEFT JOIN

(SELECT

name,

count(*)    count,

sum(weight) sum

FROM T

WHERE type = 0 AND status = 1

GROUP BY name) c ON a.name = c.name

LEFT JOIN

(SELECT

name,

count(*)    count,

sum(weight) sum

FROM T

WHERE type = 1 AND status = 0

GROUP BY name) d ON a.name = d.name

LEFT JOIN

(SELECT

name,

count(*)    count,

sum(weight) sum

FROM T

WHERE type = 1 AND status = 1

GROUP BY name) e ON a.name = e.name

LEFT JOIN

(SELECT

name,

count(*)    count,

sum(weight) sum

FROM T

WHERE status = 0

GROUP BY name) f ON a.name = f.name

LEFT JOIN

(SELECT

name,

count(*)    count,

sum(weight) sum

FROM T

WHERE status = 1

GROUP BY name) g ON a.name = g.name

T表結構為:

(因為以name欄位進行連接,type和status作為條件,建議以該三個欄位作為索引)

T表測試數據為:

運行結果為:

java中怎樣對mysql資料庫查詢

import java.sql.Connection;  

import java.sql.DriverManager;  

import java.sql.ResultSet;  

import java.sql.ResultSetMetaData;  

import java.sql.Statement;  

import java.util.Hashtable;  

  

  

public class GetDBFiled {  

    public static void conn() {  

        String driver = “com.mysql.jdbc.Driver”;  

        String url = “jdbc:mysql://localhost:3306/databaseName”;  

        String user = “root”;  

        String password = “密碼”;  

        try {  

            Class.forName(driver);  

            Connection conn = DriverManager.getConnection(url, user, password);  

            if (!conn.isClosed()) {  

                String sql = “select * from pic”;  

                System.out.println(“Succeeded connecting to the Database!”);  

                Statement statement =conn.createStatement();  

                ResultSet rs = statement.executeQuery(sql);  

                if (rs.next()) {  

                    // 得到ResultSetMetaData  

                    ResultSetMetaData rsmd = rs.getMetaData();  

                    System.out.println(rsmd.getColumnCount());  

                    for (int i = 1; i = rsmd.getColumnCount(); i++) {  

                        Hashtable hst = new Hashtable();  

                        // 把欄位名放入Name  

                        String name = String.valueOf(rsmd.getColumnLabel(i));  

                        hst.put(“Name”, name);  

                        // 把欄位類型放入Type  

                        String type = String.valueOf(rsmd.getColumnType(i));  

                        hst.put(“Type”, type);  

                        System.out.println(hst.get(“Name”)+”  “+hst.get(“Type”));  

                    }  

                }  

            }  

        } catch (Exception e) {  

  

            System.out.println(“出現異常”);  

        }  

  

    }  

}

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/129965.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:27
下一篇 2024-10-03 23:27

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論