1,進(jìn)入到控制臺(tái)中,輸入adb shell,進(jìn)入到命令模式的環(huán)境中
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)臺(tái)州免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
2,輸入:cd /data/data/
3, 選擇你所在的數(shù)據(jù)庫(kù)文件,比如我的com.android.homework, 輸入命令:cd com.android.homework
4, 可以使用ls -l 命令查看當(dāng)前目錄中的文件
5,輸入: cd databases 進(jìn)入到數(shù)據(jù)庫(kù)文件中
6, ls -l 顯示你數(shù)據(jù)庫(kù)中你建立的數(shù)據(jù)庫(kù)
7, sqlite3 info.db 進(jìn)入到你選擇的數(shù)據(jù)庫(kù)中
8, .tables :查看你建的表
9, select * from table_name;s 可以查看整個(gè)表的信息
10, 使用其他的SQL語句可以進(jìn)一步對(duì)表進(jìn)行操作,注意SQL語句必須用分號(hào)(;)結(jié)尾
一、新建外部SQLite數(shù)據(jù)庫(kù)
(1)下載并安裝 SQLite可視化管理工具(SQLite Expert Pro) v3.4.17 破解版
(2)將你手頭上的數(shù)據(jù)放到EXCEL表格中,保存為CSV格式的數(shù)據(jù)
(3)在此工具中按照你現(xiàn)有的數(shù)據(jù)格式新建數(shù)據(jù)庫(kù)和表,如數(shù)據(jù)庫(kù)為:contact.db,表為employee
(4)通過此工具菜單欄中Import/Export下的Import text file(CSV,TSC)功能,將你現(xiàn)有的CSV數(shù)據(jù)導(dǎo)入到你新建的數(shù)據(jù)表中(主要目的是省的一個(gè)一個(gè)的錄入了)
二、在eclipse中新建一個(gè)android app工程,并在新建的工程文件夾點(diǎn)右鍵new-folder,在res文件夾下新建raw文件夾(如果有就不用新建了)
三、用鼠標(biāo)將新建的SQLite數(shù)據(jù)庫(kù)文件contact.db拖動(dòng)到新建工程的res下的raw文件下,出現(xiàn)提示,選擇copy
四、程序代碼
private static final String DATABASE_PATH = "/data/data/你的主程序包路徑(如:com.szair.contact)/databases";
private static final int DATABASE_VERSION = 0;
private static final String DATABASE_NAME = "contact.db";
private static String outFileName = DATABASE_PATH + "/" + DATABASE_NAME;
try {
buildDatabase();//見下
} catch (Exception e) {
e.printStackTrace();
}
//SQLiteDatabase對(duì)象
SQLiteDatabase db=SQLiteDatabase.openDatabase(outFileName, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS);
String t="SELECT 字段名1,字段名2 FROM employee WHERE **** ORDER BY ***";
Cursor c =db.rawQuery(t, null);
if(c.moveToFirst()){
for(int i=0;i
{
String ziduan1=c.getString(0);//字段1的數(shù)據(jù)
String ziduan2=c.getString(1);//字段1的數(shù)據(jù)
}
}
------------------------------------------------
//前面用到的buildDatabase方法
private void buildDatabase() throws Exception{
InputStream myInput = getResources().openRawResource(R.raw.sz_contact);
File file = new File(outFileName);
File dir = new File(DATABASE_PATH);
if (!dir.exists()) {
if (!dir.mkdir()) {
throw new Exception("創(chuàng)建失敗");
}
}
if (!file.exists()) {
try {
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))0){
myOutput.write(buffer, 0, length);
}
myOutput.close();
myInput.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
五、程序發(fā)布
按照以上方式,可以將外部建的SQLite數(shù)據(jù)庫(kù)成功的發(fā)布出來
輕量數(shù)據(jù)!輕量數(shù)據(jù)!輕量數(shù)據(jù)!切記
android數(shù)據(jù)庫(kù)是一個(gè)輕量級(jí)數(shù)據(jù)庫(kù)sqlite。我以前測(cè)試過,數(shù)據(jù)量大于3000條的時(shí)候查詢會(huì)有明顯延遲,甚至?xí)罎ⅰ?/p>
所以,一般會(huì)存儲(chǔ)類似于用戶信息,簡(jiǎn)單的log,版本信息。你可以用電腦連接android手機(jī),然后用sqlite命令行工具訪問手機(jī)里的數(shù)據(jù)庫(kù),看看主流app都存了什么。
有點(diǎn)多請(qǐng)耐心看完。
希望能幫助你,還請(qǐng)及時(shí)采納謝謝。
一.前言
android連接數(shù)據(jù)庫(kù)的方式有兩種,第一種是通過連接服務(wù)器,再由服務(wù)器讀取數(shù)據(jù)庫(kù)來實(shí)現(xiàn)數(shù)據(jù)的增刪改查,這也是我們常用的方式。第二種方式是android直接連接數(shù)據(jù)庫(kù),這種方式非常耗手機(jī)內(nèi)存,而且容易被反編譯造成安全隱患,所以在實(shí)際項(xiàng)目中不推薦使用。
二.準(zhǔn)備工作
1.加載外部jar包
在Android工程中要使用jdbc的話,要導(dǎo)入jdbc的外部jar包,因?yàn)樵贘ava的jdk中并沒有jdbc的api,我使用的jar包是mysql-connector-java-5.1.18-bin.jar包,網(wǎng)絡(luò)上有使用mysql-connector-java-5.1.18-bin.jar包的,自己去用的時(shí)候發(fā)現(xiàn)不兼容,所以下載了比較新版本的,jar包可以去官網(wǎng)下載,也可以去百度,有很多前人們上傳的。
2.導(dǎo)入jar包的方式
方式一:
可以在項(xiàng)目的build.gradle文件中直接添加如下語句導(dǎo)入
compile files('libs/mysql-connector-java-5.1.18-bin.jar')
方式二:下載jar包復(fù)制到項(xiàng)目的libs目錄下,然后右鍵復(fù)制過來的jar包Add as libs
三.建立數(shù)據(jù)庫(kù)連接
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jdbc);
new Thread(runnable).start();
}
Handler myHandler=new Handler(){
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
Bundle data=new Bundle();
data=msg.getData();
//System.out.println("id:"+data.get("id").toString()); //輸出第n行,列名為“id”的值
Log.e("TAG","id:"+data.get("id").toString());
TextView tv= (TextView) findViewById(R.id.jdbc);
//System.out.println("content:"+data.get("content").toString());
}
};
Runnable runnable=new Runnable() {
private Connection con = null;
@Override
public void run() {
// TODO Auto-generated method stub
try {
Class.forName("com.mysql.jdbc.Driver");
//引用代碼此處需要修改,address為數(shù)據(jù)IP,Port為端口號(hào),DBName為數(shù)據(jù)名稱,UserName為數(shù)據(jù)庫(kù)登錄賬戶,Password為數(shù)據(jù)庫(kù)登錄密碼
con =
//DriverManager.getConnection("jdbc:mysql://192.168.1.202:3306/b2b", "root", "");
DriverManager.getConnection("jdbc:mysql://",
UserName,Password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
testConnection(con); //測(cè)試數(shù)據(jù)庫(kù)連接
} catch (java.sql.SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void testConnection(Connection con1) throws java.sql.SQLException {
try {
String sql = "select * from ecs_users"; //查詢表名為“oner_alarm”的所有內(nèi)容
Statement stmt = con1.createStatement(); //創(chuàng)建Statement
ResultSet rs = stmt.executeQuery(sql); //ResultSet類似Cursor
//codeResultSet/code最初指向第一行
Bundle bundle=new Bundle();
while (rs.next()) {
bundle.clear();
bundle.putString("id",rs.getString("userid"));
//bundle.putString("content",rs.getString("content"));
Message msg=new Message();
msg.setData(bundle);
myHandler.sendMessage(msg);
}
rs.close();
stmt.close();
} catch (SQLException e) {
} finally {
if (con1 != null)
try {
con1.close();
} catch (SQLException e) {}
}
}
};
注意:
在Android4.0之后,不允許在主線程中進(jìn)行比較耗時(shí)的操作(連接數(shù)據(jù)庫(kù)就屬于比較耗時(shí)的操作),需要開一個(gè)新的線程來處理這種耗時(shí)的操作,沒新線程時(shí),一直就是程序直接退出,開了一個(gè)新線程處理直接,就沒問題了。
當(dāng)然,連接數(shù)據(jù)庫(kù)是需要網(wǎng)絡(luò)的,千萬別忘了添加訪問網(wǎng)絡(luò)權(quán)限:
uses-permission android:name=”android.permission.INTERNET”/
四.bug點(diǎn)
1.導(dǎo)入的jar包一定要正確
2.連接數(shù)據(jù)庫(kù)一定要開啟新線程
3.數(shù)據(jù)庫(kù)的IP一定要是可以ping通的,局域網(wǎng)地址手機(jī)是訪問不了的
4.數(shù)據(jù)庫(kù)所在的服務(wù)器是否開了防火墻,阻止了訪問
————————————————
版權(quán)聲明:本文為CSDN博主「shuaiyou_comon」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:
Android 不自動(dòng)提供數(shù)據(jù)庫(kù)。在 Android 應(yīng)用程序中使用 SQLite,必須自己創(chuàng)建數(shù)據(jù)庫(kù),然后創(chuàng)建表、索引,填充數(shù)據(jù)。Android 提供了 SQLiteOpenHelper 幫助你創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),你只要繼承 SQLiteOpenHelper 類,就可以輕松的創(chuàng)建數(shù)據(jù)庫(kù)。SQLiteOpenHelper 類根據(jù)開發(fā)應(yīng)用程序的需要,封裝了創(chuàng)建和更新數(shù)據(jù)庫(kù)使用的邏輯。SQLiteOpenHelper 的子類,至少需要實(shí)現(xiàn)三個(gè)方法:
構(gòu)造函數(shù),調(diào)用父類 SQLiteOpenHelper 的構(gòu)造函數(shù)
onCreate()方法;// TODO 創(chuàng)建數(shù)據(jù)庫(kù)后,對(duì)數(shù)據(jù)庫(kù)的操作
onUpgrage()方法。// TODO 更改數(shù)據(jù)庫(kù)版本的操作
當(dāng)你完成了對(duì)數(shù)據(jù)庫(kù)的操作(例如你的 Activity 已經(jīng)關(guān)閉),需要調(diào)用 SQLiteDatabase 的 Close() 方法來釋放掉數(shù)據(jù)庫(kù)連接。
Android一般采用sqlite數(shù)據(jù)庫(kù)作為數(shù)據(jù)存儲(chǔ)方案。
通常的數(shù)據(jù)庫(kù)有關(guān)系型數(shù)據(jù)如:ms
ql
,mysql,oracle等,非關(guān)系型nosql數(shù)據(jù)庫(kù)
如mongodb,redis
android作為手機(jī)端的手機(jī)操作系統(tǒng),是無法直接操作大型的關(guān)系型或是no
sql類型的數(shù)據(jù)庫(kù)的。
從你的應(yīng)用描述中景點(diǎn)等信息都可以選擇存儲(chǔ)在sqlite中。
但是圖片這些信息還是建議你存儲(chǔ)到服務(wù)器上,以文件的形式存儲(chǔ)。
還有一種方式是在服務(wù)器中使用任何的關(guān)系型和非關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)你的所有數(shù)據(jù),但是你的android應(yīng)用需要通過api去訪問你的景點(diǎn)圖片信息。
標(biāo)題名稱:android中數(shù)據(jù)庫(kù),android中數(shù)據(jù)庫(kù)里有表格說查詢不到這張表
網(wǎng)頁(yè)地址:http://chinadenli.net/article34/dsdcppe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、建站公司、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)