数据库引用
SQLite
Android:
import android.database.sqlite.SQLiteDatabase; //Android内置SQLite
Python:
import sqlite3 #Python内置SQLite数据库
C#:
using System.Data.SQLite; //项目--->管理NuGet程序包--->搜索--->System.Data.SQLite--->安装
MySQL
Android:
import java.sql.Connection;
下载Android MySQL
import java.sql.DriverManager; //复制到:\app\libs\mysql-connector-java-5.1.49.jar 鼠标右键--->Add As Library--->OK
Python:
import mysql.connector #MySQL数据库 pip install mysql-connector -i https://pypi.tuna.tsinghua.edu.cn/simple
C#:
using MySql.Data.MySqlClient; //项目--->管理NuGet程序包--->搜索--->MySql.Data--->安装
数据库连接
SQLite
Android:
SQLiteDatabase AndroidSQLite = new SQLite(this).getReadableDatabase();//连接数据库 //SQLite.getReadableDatabase(); SQLite.getWritableDatabase();
Python:
Windows路径:C:\\Users\\Sql.db
Linux路径:/root/Sql.db
PythonSQLite = sqlite3.connect("路径") #连接SQLite
PythonSQLiteCursor = PythonSQLite.cursor()
C#:
SQLiteConnection C_SQLite = new SQLiteConnection(@"data source=C:\Sql.db");
C_SQLite.Open();//打开数据库
SQLiteCommand C_SQLiteCommand = C_SQLite.CreateCommand();
MySQL
Android:
new Thread(() -> {//线程
try {
Connection AndroidMySql = DriverManager.getConnection("jdbc:mysql://网址或IP:3306/数据库名称", "用户名", "密码"); #连接数据库
Statement AndroidMySqlStatement = AndroidMySql.createStatement();
} catch (Exception ignored) {}
}).start();
Python:
PythonMySql=mysql.connector.connect(host="ip地址或域名",user="数据用户名",passwd="数据库密码",database="数据库名称",charset="utf8") #连接数据库
PythonMySqlCursor=PythonMySql.cursor() #数据库游标
C#:
MySqlConnection C_MySQL = new MySqlConnection("data source=ip地址或域名;database=数据库名称;user id=数据用户名;password=数据库密码;pooling=false;charset=utf8;SSL Mode=None;");//连接MySql//pooling代表是否使用连接池
PHP:
$PHPMySql=mysqli_connect("ip地址或域名","数据用户名","数据库密码","数据库名称");
mysqli_query($PHPMySql,"set names utf8");
创建表格
NOT NULL 约束:确保某列不能有 NULL 值。
DEFAULT 约束:当某列没有指定值时,为该列提供默认值。
UNIQUE 约束:确保某列中的所有值是不同的。
PRIMARY Key 约束:唯一标识数据库表中的各行/记录。
CHECK 约束:CHECK 约束确保某列中的所有值满足一定条件
SQLite
Android:
创建“SQLite.java”文件
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class SQLite extends SQLiteOpenHelper {
public SQLite(Context context) {
super(context,"Sql.db",null,1);
}
@Override
public void onCreate(SQLiteDatabase db){//数据库第一次创建时被调用
db.execSQL("CREATE TABLE IF NOT EXISTS 表格名称(id INTEGER PRIMARY KEY AUTOINCREMENT,列 TEXT ,列 TEXT,列 TEXT)");//判断表格不存在,创建表格
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}//软件版本号发生改变时调用
}
Python:
PythonSQLiteCursor.execute("CREATE TABLE IF NOT EXISTS ysx (id INTEGER PRIMARY KEY,y TEXT,s TEXT,x TEXT)")#判断表格不存在,创建表格
C#:
C_SQLiteCommand.CommandText = "CREATE TABLE IF NOT EXISTS ysx(id INTEGER PRIMARY KEY,y TEXT,s TEXT,x TEXT)";//判断表格不存在,创建表格
C_SQLiteCommand.ExecuteNonQuery();
MySQL
Android:
int i=AndroidMySqlStatement.executeUpdate("CREATE TABLE IF NOT EXISTS 表格名称 (id INT AUTO_INCREMENT PRIMARY KEY,列 VARCHAR(99),列 VARCHAR(99),列 VARCHAR(99))");//判断表格不存在,创建表格 i=0成功
Python:
PythonMySqlCursor.execute("CREATE TABLE IF NOT EXISTS 表格名称 (id INT AUTO_INCREMENT PRIMARY KEY,列 VARCHAR(99),列 VARCHAR(99),列 VARCHAR(99))") #判断表格不存在,创建表格
C#:
C_MySQL.Open();
MySqlCommand C_MySQLCommand = new MySqlCommand("CREATE TABLE IF NOT EXISTS ysx (id INT AUTO_INCREMENT PRIMARY KEY,y VARCHAR(99),s VARCHAR(99),x VARCHAR(99))", C_MySQL);
C_MySQLCommand.ExecuteNonQuery();
C_MySQL.Close();
PHP:
mysqli_query($PHPMySql, "CREATE TABLE IF NOT EXISTS 表格名称 (id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY,列 VARCHAR(99),列 VARCHAR(99),列 VARCHAR(99),date TIMESTAMP)");//#判断表格不存在,创建表格
删除表格
SQLite
Android:
AndroidSQLite.execSQL("DROP TABLE IF EXISTS "+"表格名称"); //判断表格存在,删除表格
Python:
PythonSQLiteCursor.execute("DROP TABLE IF EXISTS "+"表格名称") #判断表格存在,删除表格
C#:
C_SQLiteCommand.CommandText = "DROP TABLE IF EXISTS ysx"; //判断表格存在,删除表格
C_SQLiteCommand.ExecuteNonQuery();
MySQL
Android:
int i=AndroidMySqlStatement.executeUpdate("DROP TABLE IF EXISTS "+"表格名称"); //判断表格存在,删除表格 i=0成功
Python:
PythonMySqlCursor.execute("DROP TABLE IF EXISTS %s" % ("表格名称")) #判断表格存在,删除表格
C#:
C_MySQL.Open();
MySqlCommand C_MySQLCommand = new MySqlCommand("DROP TABLE IF EXISTS ysx", C_MySQL);
C_MySQLCommand.ExecuteNonQuery();
C_MySQL.Close();
PHP:
$r = mysqli_query($PHPMySql, "DROP TABLE IF EXISTS 表格名称"); //判断表格存在,删除表格 $r==true删除成功
插入内容
SQLite
Android:
AndroidSQLite.execSQL("INSERT INTO " + "表格名称" + "(列,列,列) VALUES(?,?,?)", new String[]{"插入内容","插入内容","插入内容"}); //插入内容
ContentValues c = new ContentValues();
c.put("列", "插入内容");
c.put("列", "插入内容");
c.put("列", "插入内容");
AndroidSQLite.insert("表格名称", null, c);//插入内容
Python:
PythonSQLiteCursor.execute("INSERT INTO 表格名称 (列,列,列) VALUES (?,?,?)", ("插入内容","插入内容","插入内容")) #插入内容
PythonSQLite.commit()
data = [('插入内容','插入内容','插入内容'),('插入内容','插入内容','插入内容')]#插入元组
PythonSQLiteCursor.executemany("INSERT INTO 表格名称 (列,列,列) VALUES (?,?,?)",data) #插入元组
PythonSQLite.commit()
C#:
C_SQLiteCommand.CommandText = "INSERT INTO ysx(y,s,x) VALUES(@y,@s,@x)";//插入数据
C_SQLiteCommand.Parameters.Add("y", DbType.String).Value = "插入数据";
C_SQLiteCommand.Parameters.Add("s", DbType.String).Value = "插入数据";
C_SQLiteCommand.Parameters.Add("x", DbType.String).Value = "插入数据";
C_SQLiteCommand.ExecuteNonQuery();
MySQL
Android:
int i = AndroidMySqlStatement.executeUpdate("INSERT INTO 表格名称 (列,列,列) VALUES ('插入内容','插入内容','插入内容')");
PreparedStatement pre = AndroidMySql.prepareStatement("INSERT INTO " + "表格名称" + " (列,列,列) VALUES (?,?,?)");
pre.setString(1,"插入内容");
pre.setString(2,"插入内容");
pre.setString(3,"插入内容");
int i = pre.executeUpdate();//i>0成功
pre.close();
Python:
PythonMySqlCursor.execute("INSERT INTO 表格名称 (列,列,列) VALUES (%s,%s,%s)", ("插入内容","插入内容","插入内容")) #插入内容
PythonMySql.commit() #提交数据
data = [('插入内容','插入内容','插入内容'),('插入内容','插入内容','插入内容')]#插入元组
PythonMySqlCursor.executemany("INSERT INTO 表格名称 (列,列,列) VALUES (%s,%s,%s)",data) #插入元组
PythonMySql.commit() #提交数据
C#:
C_MySQL.Open();
MySqlCommand C_MySQLCommand = new MySqlCommand("INSERT INTO ysx (y,s,x) VALUES (@y,@s,@x)", C_MySQL);
C_MySQLCommand.Parameters.AddWithValue("y", "插入内容");
C_MySQLCommand.Parameters.AddWithValue("s", "插入内容");
C_MySQLCommand.Parameters.AddWithValue("x", "插入内容");
C_MySQLCommand.ExecuteNonQuery();
C_MySQL.Close();
PHP:
$r =mysqli_query($PHPMySql, "INSERT INTO 表格名称 (列,列,列) values ('插入内容','插入内容','插入内容')");
$r =mysqli_query($PHPMySql, "INSERT INTO 表格名称 (列,列,列) values ('".函数(值)."','".函数(值)."','".函数(值)."')");
更新内容
SQLite
Android:
AndroidSQLite.execSQL("UPDATE 表格名称 SET 列=?,列=?,列=? WHERE id=?",new String[]{"更新内容","更新内容","更新内容","id"});//更新内容
Python:
PythonSQLiteCursor.execute("UPDATE 表格名称 SET 列=? WHER id=?", ("更新内容","id")) #更新内容
PythonSQLite.commit() #提交数据
C#:
C_SQLiteCommand.CommandText = "UPDATE ysx SET y=@y,s=@s,x=@x WHERE id=@id"; //UPDATE 表格名称 SET column1 = value, column2 = value WHERE 条件
C_SQLiteCommand.Parameters.Add("y", DbType.String).Value = "更新数据";
C_SQLiteCommand.Parameters.Add("s", DbType.String).Value = "更新数据";
C_SQLiteCommand.Parameters.Add("x", DbType.String).Value = "更新数据";
C_SQLiteCommand.Parameters.Add("id", DbType.Int32).Value = 1;
C_SQLiteCommand.ExecuteNonQuery();
MySQL
Android:
int i = AndroidMySqlStatement.executeUpdate("UPDATE 表格名称 SET y='更新内容',u='更新内容',i='更新内容' WHERE id='id'");
PreparedStatement pre = AndroidMySql.prepareStatement("UPDATE 表格名称 SET 列=?,列=?,列=? WHERE id=?");
pre.setString(1,"更新内容");
pre.setString(2,"更新内容");
pre.setString(3,"更新内容");
pre.setString(4,"id");
int i = pre.executeUpdate();//i>0成功
pre.close();
Python:
PythonMySqlCursor.execute("UPDATE 表格名称 SET 列=%s WHERE id=%s",("更新内容","id")) #更新内容
PythonMySql.commit() #提交数据
C#:
C_MySQL.Open();
MySqlCommand C_MySQLCommand = new MySqlCommand("UPDATE ysx SET y=@y,s=@s,x=@x WHERE id=@id", C_MySQL);
C_MySQLCommand.Parameters.AddWithValue("y", "更新内容");
C_MySQLCommand.Parameters.AddWithValue("s", "更新内容");
C_MySQLCommand.Parameters.AddWithValue("x", "更新内容");
C_MySQLCommand.Parameters.AddWithValue("id", "1");
C_MySQLCommand.ExecuteNonQuery();
C_MySQL.Close();
PHP:
$r = mysqli_query($PHPMySql,"UPDATE 表格名称 SET y='更新内容',u='更新内容',i='更新内容' WHERE id=1");
$r = mysqli_query($PHPMySql,"UPDATE 表格名称 SET y='更新内容',u='更新内容',i='更新内容' WHERE id=变量");
删除内容
SQLite
Android:
AndroidSQLite.execSQL("DELETE FROM 表格名称 WHERE id=?", new String[]{"id"}); #删除内容
Python:
PythonSQLiteCursor.execute("DELETE FROM 表格名称 WHERE id=?", ("id")) #删除内容
PythonSQLite.commit()
C#:
C_SQLiteCommand.CommandText = "DELETE FROM ysx WHERE id=@id"; //删除内容
C_SQLiteCommand.Parameters.Add("id", DbType.Int32).Value = 1;
C_SQLiteCommand.ExecuteNonQuery();
MySQL
Android:
int i = AndroidMySqlStatement.executeUpdate("DELETE FROM 表格名称 WHERE id='id'");
PreparedStatement pre = AndroidMySql.prepareStatement("DELETE FROM 表格名称 WHERE id=?");
pre.setString(1,"id");
int i = pre.executeUpdate();//i>0成功
pre.close();
AndroidMySql.close();
Python:
PythonMySqlCursor.execute("DELETE FROM 表格名称 WHERE id = %s", ("id",)) #删除内容
PythonMySql.commit() #提交数据
PythonMySqlCursor.execute("truncate 表格名称") #清空表格内容
C#:
C_MySQL.Open();
MySqlCommand C_MySQLCommand = new MySqlCommand("DELETE FROM ysx WHERE id =@id", C_MySQL);
C_MySQLCommand.Parameters.AddWithValue("id", "1");
C_MySQLCommand.ExecuteNonQuery();
C_MySQL.Close();
PHP:
$r = mysqli_query($PHPMySql, "DELETE FROM 表格名称 WHERE id='变量'" );
查询内容
SQLite
Android:
Cursor o = AndroidSQLite.rawQuery("SELECT * FROM " + "表格名称"+" WHERE id = ?", new String[]{"id"}); //查询表格
int n = o.getCount();//数据库行数
while (o.moveToNext()) {//获取全部
int id2=o.getInt(o.getColumnIndex("id"));
int id = o.getInt(0);
String y1 = o.getString(1);
String y2 = o.getString(2);
String y3 = o.getString(3);
}
o.close();
Python:
PythonSQLiteCursor.execute("SELECT name from sqlite_master") #获取数据库全部表格
PythonSQLiteCursor.execute("SELECT * FROM 表格名称") #查询表格
列表 = PythonSQLiteCursor.fetchall() #获取全部
列表 = PythonSQLiteCursor.fetchone() #获取一行
C#:
C_SQLiteCommand.CommandText = "SELECT * FROM ysx WHERE id=@id";
C_SQLiteCommand.Parameters.Add("id", DbType.Int32).Value = 1;
SQLiteDataReader sr = C_SQLiteCommand.ExecuteReader();
while (sr.Read()){
sr.GetInt32(0);
sr.GetString(1);
}
sr.Close();
MySQL
Android:
ResultSet rs = AndroidMySqlStatement.executeQuery("SELECT * FROM 表格名称");
while (rs.next()){
String o=rs.getString("y");
}
Python:
PythonMySqlCursor.execute("SELECT * FROM 表格名称") #查询表格
PythonMySqlCursor.execute("SELECT * FROM %s WHERE id =%s"%("表格名称","id")) #按条件查询表格
列表 = PythonMySqlCursor.fetchall() #获取全部
列表 = PythonMySqlCursor.fetchone() #获取一行
C#:
MySqlCommand C_MySQLCommand = new MySqlCommand("SELECT y FROM ysx", C_MySQL);
C_MySQL.Open();
MySqlDataReader r1 = C_MySQLCommand.ExecuteReader();
while (r1.Read()){
r1.GetString("y");
}
C_MySQL.Close();
PHP:
$PHPResult = mysqli_query($PHPMySql,"SELECT * FROM 表格名称");
$PHPResult = $PHPMySql->query("SELECT * FROM 表格名称");
while ($row = mysqli_fetch_assoc($PHPResult)) {
echo $row['列'];
echo $row['列'];
echo $row['列'];
}
while ($row = mysqli_fetch_array($PHPResult)) {
echo $row['列'];
echo $row['列'];
echo $row['列'];
}
while ($row = $PHPResult->fetch_assoc()) {
echo $row['列'];
echo $row['列'];
echo $row['列'];
}
while ($row = $PHPResult->fetch_array()) {
echo $row['列'];
echo $row['列'];
echo $row['列'];
}
其他
SELECT DISTINCT Directory FROM Bookmarks
SELECT Directory FROM Bookmarks group by Directory having Directory!=''
SQLite
Android:
AndroidSQLite.execSQL("ALTER TABLE 表格名称 RENAME TO 新表格名称;"); //表格重新命名
Python:
C#:
C_SQLiteCommand.CommandText = "ALTER TABLE ysx ADD COLUMN yx TEXT";//增添列
C_SQLiteCommand.ExecuteNonQuery();
C_SQLiteCommand.CommandText = "SELECT count(*) FROM ysx";//获取查询数据的行数
SQLiteDataReader sr = C_SQLiteCommand.ExecuteReader();
sr.Read();
Console.WriteLine(sr.GetInt32(0).ToString());
sr.Close();
C_SQLiteCommand.CommandText = "SELECT sql FROM sqlite_master WHERE TYPE='table'";//读取创建表的SQL语句
SQLiteDataReader sr = C_SQLiteCommand.ExecuteReader();
while (sr.Read())
{
Console.WriteLine(sr[0].ToString());
}
sr.Close();
查询表结构
string path = @"d:\test\123.sqlite";
SQLiteConnection cn = new SQLiteConnection("data source=" + path);
cn.Open();
SQLiteCommand cmd = cn.CreateCommand();
cmd.CommandText= "PRAGMA table_info('t1')";
//写法一:用DataAdapter和DataTable类,记得要 using System.Data
SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd);
DataTable table = new DataTable();
adapter.Fill(table);
foreach(DataRow r in table.Rows)
{
Console.WriteLine($"{r["cid"]},{r["name"]},{r["type"]},{r["notnull"]},{r["dflt_value"]},{r["pk"]} ");
}
Console.WriteLine();
//写法二:用DataReader,这个效率高些
SQLiteDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
for(int i = 0; i < reader.FieldCount; i++)
{
Console.Write($"{reader[i]},");
}
Console.WriteLine();
}
reader.Close();
如果不止一个表,要遍历所有表的结构如下,就要用到 SQLite 中的特殊表 sqlite_master,它的结构如下:
CREATE TABLE sqlite_master(
type text,
name text,
tbl_name text,
rootpage integer,
sql text
);
当 type = table 时,name 和 tbl_name 是一样的,其他比如 type =index 、view 之类时,tbl_name 才是表名
//---遍历查询表结构
static void QueryAllTableInfo()
{
string path = @"d:\test\123.sqlite";
SQLiteConnection cn = new SQLiteConnection("data source=" + path);
if (cn.State != System.Data.ConnectionState.Open)
{
cn.Open();
SQLiteCommand cmd = new SQLiteCommand();
cmd.Connection = cn;
cmd.CommandText = "SELECT name FROM sqlite_master WHERE TYPE='table' ";
SQLiteDataReader sr = cmd.ExecuteReader();
List tables = new List();
while (sr.Read())
{
tables.Add(sr.GetString(0));
}
//datareader 必须要先关闭,否则 commandText 不能赋值
sr.Close();
foreach (var a in tables)
{
cmd.CommandText = $"PRAGMA TABLE_INFO({a})";
sr = cmd.ExecuteReader();
while (sr.Read())
{
Console.WriteLine($"{sr[0]} {sr[1]} {sr[2]} {sr[3]}");
}
sr.Close();
}
}
cn.Close();
}
MySQL
Android:
Python:
PythonMySqlCursor.execute("SHOW TABLES") #获取数据库所有表格
for i in PythonMySqlCursor:
print(i)#数据库表格
C#:
关闭数据库
SQLite
Android:
Python:
PythonSQLiteCursor.close #关闭数据库链接
PythonSQLite.close #关闭数据库链接
C#:
C_SQLite.Close();//关闭数据库链接
MySQL
Android:
AndroidMySqlStatement.close(); //关闭数据库链接
AndroidMySql.close(); //关闭数据库链接
Python:
PythonMySqlCursor.close() #关闭数据库链接
PythonMySql.close() #关闭数据库链接
C#:
PHP:
mysqli_free_result($PHPResult); //释放结果集
mysqli_close($PHPMySql); //关闭数据库链接