androidsqlitein
㈠ 如何檢查資料庫連接是否成功或不在 android 系統
android的系統資料庫在調用的時候都封裝了 咱們只需要寫where的condition,表結構和標明對咱們都是不透明的 這就對深入了解帶來了很多麻煩,即使有源碼查看起來也很費勁。
android使用的是sqlite資料庫,一般都是每個模塊都有一個.db文件,咱們可以將系統里的.db文件拷出來在使用android tool中的sqlite3命令來操作和測試資料庫。
首先啟動模擬器或將手機連接電腦
使用find命令將系統中所有的db文件找出來
adb shell find / -name '*.db' -type f
/mnt/sdcard/openfeint/webui/manifest.db
/mnt/sdcard/dbms/DBMS.db
/data/system/accounts.db
/data/data/com.android.vending/databases/assets14.db
/data/data/com.android.vending/databases/suggestions.db
/data/data/com.android.vending/databases/webviewCache.db
/data/data/com.android.vending/databases/webview.db
/data/data/com.android.vending/databases/billing4.db
/data/data/com.android.providers.userdictionary/databases/user_dict.db
/data/data/com.android.providers.telephony/databases/mmssms.db
/data/data/com.android.providers.telephony/databases/telephony.db
/data/data/com.android.providers.settings/databases/settings.db
/data/data/com.android.providers.media/databases/internal.db
/data/data/com.android.providers.media/databases/external-bd717cb2.db
/data/data/com.android.providers.media/databases/external-5c2507fe.db
/data/data/com.android.launcher/databases/launcher.db
/data/data/com.example.android.apis/databases/webviewCache.db
/data/data/com.example.android.apis/databases/webview.db
/data/data/com.eclipsim.gpsstatus2/databases/google_analytics.db
/data/data/com.eclipsim.gpsstatus2/databases/webviewCache.db
/data/data/com.eclipsim.gpsstatus2/databases/webview.db
/data/data/com.android.inputmethod.latin/databases/userbigram_dict.db
/data/data/com.android.inputmethod.latin/databases/auto_dict.db
/data/data/com.google.android.gsf/databases/talk.db
/data/data/com.google.android.gsf/databases/webviewCache.db
/data/data/com.google.android.gsf/databases/webview.db
/data/data/com.google.android.gsf/databases/googlesettings.db
/data/data/com.google.android.gsf/databases/subscribedfeeds.db
/data/data/com.google.android.gsf/databases/gservices.db
/data/data/com.google.android.gsf/databases/gls.db
/data/data/com.google.android.googlequicksearchbox/databases/qsb-log.db
/data/data/com.google.android.gm/databases/downloads.db
/data/data/com.google.android.gm/databases/[email protected]
/data/data/com.google.android.gm/databases/gmail.db
/data/data/com.google.android.apps.genie.geniewidget/databases/weather.db
/data/data/com.cooliris.media/databases/launcher.db
/data/data/com.cooliris.media/databases/picasa.db
/data/data/com.android.email/databases/EmailProviderBody.db
/data/data/com.android.email/databases/EmailProvider.db
/data/data/com.android.providers.drm/databases/drm.db
/data/data/com.getsetgames.megajump/databases/google_analytics.db
/data/data/com.getsetgames.megajump/databases/webviewCache.db
/data/data/com.getsetgames.megajump/databases/webview.db
/data/data/com.android.providers.downloads/databases/downloads.db
/data/data/com.rich.webviewtest/databases/webviewCache.db
/data/data/com.rich.webviewtest/databases/webview.db
/data/data/com.android.deskclock/databases/alarms.db
/data/data/com.android.providers.contacts/databases/contacts2.db
/data/data/com.android.providers.calendar/databases/calendar.db
/data/data/com.android.browser/app_icons/WebpageIcons.db
/data/data/com.android.browser/app_geolocation/CachedGeoposition.db
/data/data/com.android.browser/app_databases/Databases.db
/data/data/com.android.browser/app_appcache/ApplicationCache.db
/data/data/com.android.browser/databases/browser.db
/data/data/com.android.browser/databases/webviewCache.db
/data/data/com.android.browser/databases/webview.db
/data/data/com.android.bluetooth/databases/btopp.db
有了個db文件列表咱們就可以把這些db 復制到電腦上進行操作了
以通訊錄資料庫為例執行以下操作:
adb pull /data/data/com.android.providers.contacts/databases/contacts2.db F:/androidres/systemdb
--1669 KB/s (271360 bytes in 0.158s)
F:/androidres/systemdb為任意本地目錄 不明白pull命令的查看adb help
用sqlite3打開這個文件
F:/androidres/systemdb>sqlite3 contacts2.db
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
_sync_state settings
_sync_state_metadata status_updates
accounts v1_settings
activities view_contacts
agg_exceptions view_contacts_restricted
android_metadata view_data
calls view_data_restricted
contact_entities_view view_groups
contact_entities_view_restricted view_raw_contacts
contacts view_raw_contacts_restricted
data view_v1_contact_methods
groups view_v1_extensions
mimetypes view_v1_group_membership
name_lookup view_v1_groups
nickname_lookup view_v1_organizations
packages view_v1_people
phone_lookup view_v1_phones
properties view_v1_photos
raw_contacts
㈡ Android上應該是用SQLite的吧,那如何實現@@rowcount或者rowcount()的效果呢
有一個辦法 在表中添加一列叫myrownumber什麼的 然後是autoincreate的 就是每追加一條就自動給一個id的
比如myrownumber INTEGER PRIMARY KEY autoincrement
這樣myrownumber就自動從1開始賦值
然後取最新的一行的行號 最大行號就是多少行了
㈢ 安卓 sqlite 下面not in語句無效,該怎麼解決
可以用字元串拼接sql語句,有幾個值,添加幾個佔位符
㈣ 安卓怎麼獲取sqlite中的數據
解決方法 1: 不應該是用單獨的語句,你不應該用單獨的sql語句? 只是創建一個ArrayList,在這個activity類中存儲所有需要的數值。 例如: ArrayList myData; 現在在資料庫類的幫助下寫一個function,就像下邊: //得到你想要的數據 public ArrayList<String> getAllData() { ArrayList<String> subTitleList = null; Cursor cursor = null; try { String queryString = "SELECT * FROM champions"; cursor = db.rawQuery(queryString, null); if (cursor != null && cursor.moveToFirst()) { subTitleList = new ArrayList<String>(); do { String nextUser = new String(cursor.getString(cursor.getColumnIndex("name"))); String nextUser = new String(cursor.getString(cursor.getColumnIndex("title"))); String nextUser = new String(cursor.getString(cursor.getColumnIndex("thumb"))); subTitleList.add(nextUser); } while (cursor.moveToNext()); System.out.println("it comes in SubTitleList"); } } catch (Exception e) { e.printStackTrace(); subTitleList = null; } finally { if (cursor != null && !cursor.isClosed()) { cursor.deactivate(); cursor.close(); cursor = null; } if(db != null){ db.close(); } } //System.out.println("SubTitleList is: "+subTitleList); return subTitleList; } 現在在你的activity類中你可以調用這個方法,然後從myData ArrayList獲得所有你需要的數據。 1 myData = db.getAllData(); // 我想如果你想要抓所有的數據的話是不需要ID的。 希望你能明白
㈤ android使用sqlite時出現問題,可能與內存有關,求大神幫忙
這個不是bug欄位,看紅色部分
㈥ 在Android studio上寫的軟體在模擬器上可以運行,在手機上不能運行.
檢查你的DataBaseHelper類中的創建表格語句是否正確。問題出在android.database.sqlite.SQLiteException: no such table: word_z (code 1): , while compiling: SELECT * FROM word_z,意思是SQL沒有在資料庫里找到word_z這張表
㈦ android sqlite 查詢表有多少數據
select * from book where id='003 or id='005' 或者 select * from book where id in('003','005')
㈧ 在android中從sqlite中獲得數據很慢怎麼解決
解決方法 1:
不應該是用單獨的語句,你不應該用單獨的sql語句?
只是創建一個ArrayList,在這個activity類中存儲所有需要的數值。
例如: ArrayList myData;
現在在資料庫類的幫助下寫一個function,就像下邊:
//得到你想要的數據
public ArrayList<String> getAllData() {
ArrayList<String> subTitleList = null;
Cursor cursor = null;
try {
String queryString = "SELECT * FROM champions";
cursor = db.rawQuery(queryString, null);
if (cursor != null && cursor.moveToFirst()) {
subTitleList = new ArrayList<String>();
do {
String nextUser = new String(cursor.getString(cursor.getColumnIndex("name")));
String nextUser = new String(cursor.getString(cursor.getColumnIndex("title")));
String nextUser = new String(cursor.getString(cursor.getColumnIndex("thumb")));
subTitleList.add(nextUser);
}
while (cursor.moveToNext());
System.out.println("it comes in SubTitleList");
}
}
catch (Exception e) {
e.printStackTrace();
subTitleList = null;
}
finally {
if (cursor != null && !cursor.isClosed()) {
cursor.deactivate();
cursor.close();
cursor = null;
}
if(db != null){
db.close();
}
}
//System.out.println("SubTitleList is: "+subTitleList);
return subTitleList;
}
現在在你的activity類中你可以調用這個方法,然後從myData ArrayList獲得所有你需要的數據。
1
myData = db.getAllData(); // 我想如果你想要抓所有的數據的話是不需要ID的。
希望你能明白
㈨ 如何將excel轉換成android下sqlite管理的資料庫文件
添加以下代碼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
using System.Threading;
using System.Data.OleDb;
using System.Data.SQLite;
using DormitoryRating;
//***********************************************************************
//版權所有:AnnKiny
//文件名稱:Form1.cs
//CLR 版本:9.0
//描 述:
//作 者:Hanlong Tu
//博 客:(CSDN) http://my.csdn.net/?ref=toolbar_logo QQ:136939236
//創建日期:2014-08-13 14:59:03
//修 改 人:
//修改日期:
//修改原因:
//備 註: 請尊重作者,保留作者信息。
//***********************************************************************
namespace Sign_In
{
public partial class FrmSignIN : Form
{
string checkFilePath = "";//選擇路徑
SerialPort comDevice = new SerialPort();//實例化串口
string[] coms = SerialPort.GetPortNames();//獲取串口名稱
string AppPath = "";//聲明程序路徑
public FrmSignIN()
{
InitializeComponent();
AppPath = Application.StartupPath;
}
private void FrmSignIN_Load(object sender, EventArgs e)
{
btnBrows.Focus();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(AppDomain.CurrentDomain.SetupInformation.CachePath);
}
private void btnChange_Click(object sender, EventArgs e)
{
if (File.Exists(txtCheckFile.Text.Trim()))
{
ChangeDB();
}
else
{
MessageBox.Show("你選擇的文件不存在!", "錯誤:");
}
}
//轉DB
private void ChangeDB()
{
//1.創建db文件2.創建表3.創建欄位
string fileName = labName.Text.TrimEnd('.', 'x', 'l', 's', 'x') + ".db";//獲取文件名
if (!File.Exists(AppPath))
{
SQLiteConnection.CreateFile(fileName);//創建文件
}
string connectionString = "data source=" + AppPath + "\\" + fileName + ";Pooling=true;FailIfMissing=false";//資料庫連接字元串
SQLiteConnection conn = new SQLiteConnection(connectionString);
conn.Open();
string[] getTableNames = GetTablesName(txtCheckFile.Text.Trim());
//創建所有表和欄位
for (int i = 0; i < getTableNames.Length; i++)
{
string[] getColumnNames = GetExcelColumnsName(txtCheckFile.Text.Trim(), getTableNames[i]);
string sqlCreate = "CREATE TABLE " + getTableNames[i] + "(" + getColumnNames[0] + " varchar(100))";
SQLiteCommand command = new SQLiteCommand(sqlCreate, conn);
try
{
command.ExecuteNonQuery();
}
catch (Exception)
{
MessageBox.Show("文件已經存在!");
return;
}
for (int j = 1; j < getColumnNames.Length; j++)
{
string sqlAdd = "alter table " + getTableNames[i] + " add " + getColumnNames[j] + " varchar(100)";
SQLiteCommand commandAdd = new SQLiteCommand(sqlAdd, conn);
commandAdd.ExecuteNonQuery();
}
}
//插入所有數據
for (int i = 0; i < getTableNames.Length; i++)
{
DataSet DS = GetExcelData(txtCheckFile.Text.Trim(), getTableNames[i]);
DataTable DT = new DataTable();
DT = DS.Tables[0];
DataColumnCollection dcc = DT.Columns;
DataRowCollection drc = DT.Rows;
pgbChangeDB.Maximum = drc.Count;
pgbChangeDB.Value = 0;
StringBuilder sb = new StringBuilder();
for (int k = 0; k < drc.Count; k++)
{
for (int j = 0; j < dcc.Count; j++)
{
string xiegan = "\"";
sb.Append(xiegan + drc[k][j].ToString() + xiegan);
sb.Append(",");
}
string sqlInsert = "insert into " + getTableNames[i] + " values(" + sb.ToString().TrimEnd(',') + ")";
SQLiteCommand command = new SQLiteCommand(sqlInsert, conn);
command.ExecuteNonQuery();
Application.DoEvents();
pgbChangeDB.Value += 1;
sb.Length = 0;
}
}
conn.Close();
System.Data.SQLite.SQLiteConnection.ClearAllPools();
MessageBox.Show("轉換成功!", "提示:");
}
public void GetExcelView(string Path)
{
string strConn = "Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source =" + Path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'"; //Excel連接字元串
OleDbConnection conn = new OleDbConnection(strConn);
string strExcel = "select * from [" + listTablesName.SelectedItem.ToString() + "$]";
conn.Open();//打開資料庫
OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);
DataSet ds = new DataSet();//把數據載入到ds
myCommand.Fill(ds, "Table");
this.dataGridView1.DataSource = ds.Tables[0];
DataTable dt = ds.Tables[0];
DataColumnCollection dcct = dt.Columns;
conn.Close();
System.Data.SQLite.SQLiteConnection.ClearAllPools();
}
/// <summary>
/// 獲取Excle表的表名稱
/// </summary>
/// <param name="Path">路徑</param>
/// <returns>Excle表格名稱數組</returns>
public string[] GetTablesName(string Path)
{
List<string> tableNames = new List<string>();
string[] strTableNames = new string[10];// 表名稱
listTablesName.Items.Clear();//清除列表
string strConn = "Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source =" + Path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'"; //Excel連接字元串
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);//獲取Excel的所有表
DataRowCollection dc = schemaTable.Rows;
int i = dc.Count;
for (int count = 0; count < i; count++)
{
listTablesName.Items.Add(schemaTable.Rows[count][2].ToString().TrimEnd('$'));
tableNames.Add(schemaTable.Rows[count][2].ToString().TrimEnd('$'));//賦值給表名稱
strTableNames = tableNames.ToArray();
}//添加數據
conn.Close();
return strTableNames;
}
/// <summary>
/// 獲取欄位名稱
/// </summary>
/// <param name="Path">路徑</param>
/// <param name="TableName">表名</param>
/// <returns>欄位名稱數組</returns>
public string[] GetExcelColumnsName(string Path, string TableName)
{
List<string> columnsName = new List<string>();
string[] strcolumnsName;
string strConn = "Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source =" + Path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'"; //Excel連接字元串
OleDbConnection conn = new OleDbConnection(strConn);
string strExcel = "select * from [" + TableName + "$]";
conn.Open();//打開資料庫
OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);
DataSet ds = new DataSet();//把數據載入到ds
myCommand.Fill(ds, "Table");
//this.dataGridView1.DataSource = ds.Tables[0];
DataTable dt = ds.Tables[0];
DataColumnCollection dcct = dt.Columns;
for (int i = 0; i < dcct.Count; i++)
{
columnsName.Add(dcct[i].ToString());
}
strcolumnsName = columnsName.ToArray();
conn.Close();
return strcolumnsName;//返回表格名稱數組
}
/// <summary>
/// 獲取Excel數據
/// </summary>
/// <param name="Path">Excle路徑</param>
/// <param name="TableName">Excle表格名</param>
/// <returns>返回DataSet</returns>
public DataSet GetExcelData(string Path, string TableName)
{
List<string> columnsName = new List<string>();
string strConn = "Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source =" + Path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'"; //Excel連接字元串
OleDbConnection conn = new OleDbConnection(strConn);
string strExcel = "select * from [" + TableName + "$]";
conn.Open();//打開資料庫
OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);
DataSet ds = new DataSet();//把數據載入到ds
myCommand.Fill(ds, "Table");
return ds;
}
㈩ android資料庫錯誤
看樓主的日誌,應該是表重復創建了( Failure 1 (table log_in already exists) )。
樓主要創建的表名叫log_in吧,你在創建表之前想用一句語句判斷是否該表已存在,如果存在就刪除:
db.execSQL("DROP TABLE IF EXISTS diary"); //如果存在,刪除原先表
可你這里判斷存在的表寫死了diary,而不是你要創建的log_in,所以在你創建log_in的時候重復了。
下面還有句日誌(near "in": syntax error: , while compiling: INSERT INTO log in() VALUES(?);
)顯示你給的表名是log in,而不是log_in,導致語法錯誤了