2010-12-08 13 views
18

अरे, मैं AUTO_INCREMENT कॉलम के साथ डेटाबेस बनाना चाहता हूं। लेकिन मुझे नहीं पता कि विधि सम्मिलन में मूल्य का विश्लेषण कैसे करें। मुझे नहीं पता कि ऑटोऑक्रिकमेंट तर्क के लिए क्या पार्स करना है, और मैंने 1 को पार्स किया है जहां auto_increment होना चाहिए, लेकिन मुझे नहीं पता कि मुझे पार्स करना चाहिए।Android SQLite डेटाबेस पर AUTO_INCREMENT कैसे बनाएं?

यहां CallDatHelper.java कक्षा है जहां मैं विधि सम्मिलित करता हूं, और वह तरीका जो डेटाबेस बनाता है।

package com.psyhclo; 

import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteStatement; 
import android.util.Log; 

import java.util.ArrayList; 
import java.util.List; 

public class CallDataHelper { 

private static final String DATABASE_NAME = "calls.db"; 
private static final int DATABASE_VERSION = 1; 
private static final String TABLE_NAME = "contact_data"; 

private Context context; 
private SQLiteDatabase db; 

public CallDataHelper(Context context) { 
    this.context = context; 
    OpenHelper openHelper = new OpenHelper(this.context); 
    this.db = openHelper.getWritableDatabase(); 
} 

public boolean insert(Integer cId, String cName, String numType, 
     String cNum, String dur, String date, String currTime) { 
    this.db.execSQL("insert into " 
      + TABLE_NAME 
      + "(id, contact_id, contact_name, number_type, contact_number, duration, date, current_time, cont) " 
      + "values(? ," + cId + ", " + cName + ", " + numType + ", " 
      + cNum + ", " + dur + ", " + date + ", " + currTime + ", ?)"); 
    return true;   
} 

public void atualiza(String word) { 
    this.db.execSQL("UPDATE words SET cont = cont + 1 WHERE (word= ?)", 
      new String[] { word }); 
} 

public void deleteAll() { 
    this.db.delete(TABLE_NAME, null, null); 
} 

public boolean select(String wrd) { 

    String word; 
    Cursor cursor = this.db.query(TABLE_NAME, new String[] { "word" }, 
      "word like ?", new String[] { wrd }, null, null, null); 
    if (cursor.moveToFirst()) { 
     do { 
      word = cursor.getString(0); 
     } while (cursor.moveToNext()); 
    } 
    if (cursor != null && !cursor.isClosed()) { 
     cursor.close(); 
     return true; 
    } else { 
     return false; 
    } 
} 

public List<String> selectAll() { 
    List<String> list = new ArrayList<String>(); 
    Cursor cursor = this.db.query(TABLE_NAME, new String[] { "word" }, 
      null, null, null, null, "cont desc"); 
    if (cursor.moveToFirst()) { 
     do { 
      list.add(cursor.getString(0).toUpperCase()); 
     } while (cursor.moveToNext()); 
    } 
    if (cursor != null && !cursor.isClosed()) { 
     cursor.close(); 
    } 
    return list; 
} 

private static class OpenHelper extends SQLiteOpenHelper { 

    OpenHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE " 
       + TABLE_NAME 
       + "(id INTEGER PRIMARY KEY AUTOINCREMENT, contact_id INTEGER, contact_name VARCHAR(50), number_type VARCHAR(50), contact_number VARCHAR(50), duration TIME, date DATE, current_time TIME, cont INTEGER)"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w("RatedCalls Database", 
       "Upgrading database, this will drop tables and recreate."); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
     onCreate(db); 
    } 
} 
} 

और यहाँ है, जहां मैं डालने विधि डेटा मैं सम्मिलित करना चाहते हैं पार्स करने कहते हैं।

this.dh.insert(1 , 1, contactName, numType, contactNumber, 
        duration, callDate, currTime); 
+2

मुझे एक सुरक्षा टिप्पणी यहाँ करते हैं: मैन्युअल रूप से निर्माण एसक्यूएल इस तरह के प्रश्नों एक निश्चित नुस्खा बहुत मुश्किल हैक हो जाते है। यदि कोई हमलावर उन तर्कों में से किसी के मूल्य का निर्धारण करने के लिए मिलता है तो क्वेरी पूरी तरह से संशोधित की जा सकती है। यहां अधिक जानकारी देखें: http://en.wikipedia.org/wiki/SQL_injection – MarioVilas

उत्तर

13

आपको कुछ भी पार्स करने की आवश्यकता नहीं है। यदि यह कॉलम AUTOINCREMENT के रूप में बनाया गया था, सिर्फ अन्य मूल्यों पारित:

ContentValues values = new ContentValues(); 
values.put("contact_id", cId); 
values.put("contact_name", cName); 
// etc. 
db.insert(TABLE_NAME, null, values); 
+1

लेकिन इसे किसी अन्य वर्ग में कैसे कार्यान्वित करें? बेहतर, इस विधि को दूसरे वर्ग पर कैसे कॉल करें, जो सिर्फ इसका संदर्भ देता है और सही तर्कों का विश्लेषण करता है? – rogcg

+0

अच्छा ... आपके पास पहले से ही एक विधि है, बस इसका उपयोग करें ... समस्या क्या है? – Cristian

+0

मैं कहता हूं, db.insert विधि को गतिविधि पर सही कहा जाना चाहिए? लेकिन इस विधि को कॉल करने के लिए मुझे ऑब्जेक्ट डीबी को निष्क्रिय करने की आवश्यकता है, जो एक SQLiteDatabase ऑब्जेक्ट है। लेकिन गतिविधि पर इसे कैसे पहुंचाया जाए? मेरा मतलब है, निजी SQLiteDatabase डीबी = 'क्या ???'। – rogcg

1

this.db.insert (:

db.execSQL("insert into " 
     + TABLE_NAME 
     + "(contact_id, contact_name, number_type, contact_number, duration, date, current_time, cont) " 
     + "values("+ cId + ", " + cName + ", " + numType + ", " 
     + cNum + ", " + dur + ", " + date + ", " + currTime + ", ?)"); 

वैसे, यह हमेशा Android के insert पद्धति का उपयोग करके डेटा डालने के लिए अनुशंसा की जाती है नल, 1, संपर्क नाम, numType, contactNumber, अवधि, कॉलडेट, currTime);

+5

जावा में कोई 'शून्य' कीवर्ड नहीं है। – Cristian

21

आपको विशेष रूप से AUTO_INCREMENT को MYSQL में लिखना नहीं है।

बस प्राथमिक कुंजी फ़ील्ड को _id INTEGER PRIMARY KEY के रूप में परिभाषित करना होगा।

यदि तालिका बनाते समय INT के साथ प्राथमिक कुंजी फ़ील्ड को परिभाषित किया गया है, तो यह काम नहीं करेगा। यह INTEGER होना चाहिए और यह है।

आप दायर जब रिकॉर्ड डालने, यह स्वचालित रूप से मूल्य में वृद्धि होगी एक अनूठा मूल्य (उसी तरह MYSQL AUTO_INCREMENT काम करता है) होने के लिए

+4

प्रश्न में कहीं भी MySQL का उल्लेख नहीं लगता है। – XTL

+5

मुझे लगता है कि जीबीडब्ल्यू चीजों को बेहतर तरीके से समझाने के लिए बस MySQL के साथ तुलना कर रहा है। – MarioVilas

+3

हाहा, यह मेरी समस्या थी। मैंने इसे इंट के रूप में घोषित किया;) धन्यवाद। – Pijusn

1

अंतिम स्थिर स्ट्रिंग Database_Name = "empDb प्राथमिक कुंजी के लिए किसी भी मूल्य में उत्तीर्ण नहीं होते जब .db ";

public DatabaseHelper(Context context) { 
    super(context, Database_name, null, 1); 
} 
@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table emp_tbl (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,salary TEXT)"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS tbl_emp"); 
} 

जाओ अधिक जानकारी https://www.youtube.com/watch?v=W8-Z85oPNmQ ब्लॉग: https://itmulc.blogspot.com/2016/08/android-sqlite-database-with-complete.html

संबंधित मुद्दे