অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে 'এখন' সেট করার তারিখের সময় সহ একটি এসকিউএল রেকর্ড কীভাবে সন্নিবেশ করা যায়?


109

বলুন, আমাদের একটি টেবিল তৈরি করা হয়েছে:

create table notes (_id integer primary key autoincrement, created_date date)

একটি রেকর্ড সন্নিবেশ করতে, আমি ব্যবহার করব

ContentValues initialValues = new ContentValues(); 
initialValues.put("date_created", "");
long rowId = mDb.insert(DATABASE_TABLE, null, initialValues);

কিন্তু কিভাবে DATE_CREATED কলাম সেট করতে এখন ? এটি পরিষ্কার করার জন্য,

initialValues.put("date_created", "datetime('now')");

সঠিক সমাধান নয়। এটি কেবল কলামটিকে "ডেটটাইম ('এখন')" পাঠ্যে সেট করে।


1
এখানে একটি সমস্যা হ'ল অ্যান্ড্রয়েড ডিবিতে এসকিউএলাইট ব্যবহার করে। আপনি একটি নির্দিষ্ট ধরণের একটি কলাম সেট করতে পারেন তবে এটি কলামগুলির 'সখ্যতা' সেট করে। এসকিউএলাইট আপনাকে যে কোনও ঘোষণাপত্র নির্বিশেষে যে কোনও কলামে কোনও মান রাখতে দেয়। এসকিউএলাইটের কাছে যে কোনও জায়গায় স্ট্রিংয়ের 'তারিখ' লাগানো বেশ ঠিক আছে। sqlite.org এর আরও বিশদ ব্যাখ্যা রয়েছে। আমি নীচে ই-সন্তুষ্ট উত্তরটি দিয়ে ভোট দিচ্ছি, এটি আমি কীভাবে করব (বিশেষত জাভা উপায়)।
উইল

উত্তর:


194

আপনি জাভা রেপার "কন্টেন্টভ্যালু" ব্যবহার করে ডেটটাইম ফাংশন ব্যবহার করতে পারবেন না। হয় আপনি ব্যবহার করতে পারেন:

  • SQLiteDatedia.execSQL যাতে আপনি একটি কাঁচা এসকিউএল কোয়েরি লিখতে পারেন।

    mDb.execSQL("INSERT INTO "+DATABASE_TABLE+" VALUES (null, datetime()) ");
  • বা জাভা তারিখের সময় ক্ষমতা:

    // set the format to sql date time
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    Date date = new Date();
    ContentValues initialValues = new ContentValues(); 
    initialValues.put("date_created", dateFormat.format(date));
    long rowId = mDb.insert(DATABASE_TABLE, null, initialValues);

1
দয়া করে কোডটিকে 'কোড নমুনা' হিসাবে পুনরায় ফর্ম্যাট করুন। অন্যথায় ভাল উত্তর।
উইল

3
এটা কি java.util.Date বা java.sql.Date?
গ্রেগ বি

5
java.util.Date, তবে আমি নিশ্চিত যে আপনি এটি java.sql. তারিখের তারিখের সাথেও করতে পারবেন।
ই-সন্তুষ্ট

44

আমার কোডে আমি ব্যবহার করি DATETIME DEFAULT CURRENT_TIMESTAMP কলামটির ধরণ এবং সীমাবদ্ধতা হিসাবে ।

আপনার ক্ষেত্রে আপনার টেবিল সংজ্ঞা হবে

create table notes (
  _id integer primary key autoincrement, 
  created_date date default CURRENT_DATE
)

32

পদ্ধতি 1

CURRENT_TIME  Inserts only time
CURRENT_DATE  Inserts only date
CURRENT_TIMESTAMP  Inserts both time and date

CREATE TABLE users(
    id INTEGER PRIMARY KEY,
    username TEXT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

পদ্ধতি 2

db.execSQL("INSERT INTO users(username, created_at) 
            VALUES('ravitamada', 'datetime()'");

পদ্ধতি 3 জাভা তারিখ ফাংশন ব্যবহার করে

private String getDateTime() {
        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss", Locale.getDefault());
        Date date = new Date();
        return dateFormat.format(date);
}

ContentValues values = new ContentValues();
values.put('username', 'ravitamada');
values.put('created_at', getDateTime());
// insert the row
long id = db.insert('users', null, values);

কৌতূহলী, আপনি কীভাবে ফলাফলের স্ট্রিংটিকে কোনও ডেট অবজেক্টে স্যুইচ করতে পারবেন তা দেখাতে পারেন?
এরিক

@ এরিক আপনি আরও তথ্য দিতে পারবেন, আপনি যা বলেছিলেন তা ঠিকভাবে পাচ্ছি না।
রিকিন প্যাটেল

সুতরাং উপরে আপনি একটি তারিখ অবজেক্ট নিচ্ছেন এবং এটি একটি স্ক্লাইট কলামে স্থাপন করার জন্য একটি স্ট্রিংয়ে রূপান্তর করছেন .. কিন্তু আপনি যখন স্ট্রিংটি ডাটাবেস থেকে টানেন, আপনি কীভাবে এটি একটি তারিখ অবজেক্টে রূপান্তর করবেন?
এরিক

1
@ এরিক সিম্পলডিটফরমেট ফর্ম্যাটার = নতুন সিম্পলডেট ফরমেট ("yyyy-MM-dd HH: মিমি: এসএস"); (created_at) formatter.parse;
দক্ষম

8

আপনি ব্যবহার করতে পারেন এমন কয়েকটি বিকল্প রয়েছে:

  1. আপনি তার পরিবর্তে "(DATETIME ('এখন'))" স্ট্রিংটি ব্যবহার করে দেখতে পারেন।
  2. ডেটটাইমটি নিজে Inোকান, যেমন সিস্টেম.কন্ট্রেনটাইমমিলিস () সহ
  3. এসকিউএল টেবিল তৈরি করার সময়, তৈরি_ তারিখ কলামের বর্তমান তারিখের সময় হিসাবে একটি ডিফল্ট মান নির্দিষ্ট করুন।
  4. সরাসরি sertোকাতে এসকিউএলডিটাবেস.এক্সেকএসকিউএল ব্যবহার করুন ।

নম্বর 1 কাজ করে না (কমপক্ষে ব্যবহার করার সময় নয় ContentValuesএবং update(), এটি DATETIME('now')কলামে কেবল স্ট্রিংটি রাখে
বার্ট ফ্রেডারিচস

1
দ্বিতীয়টির টাইমজোনগুলির সাথে সমস্যা রয়েছে। আমি একটি দিয়ে একটি রেকর্ড সন্নিবেশ করলাম DEFAULT CURRENT_TIMESTAMPএবং পরে System.currentTimeMillis()আপডেট করার জন্য ব্যবহৃত হত । আমি এক ঘন্টা পার্থক্য দেখছি।
বার্ট ফ্রেডারিচস

@ মুনসিলন আপনি কি যাচাই করেছেন যে (ডেটটাইম ('এখন')) প্রকৃতপক্ষে বর্তমান তারিখের সময়টি প্রবেশ করবে?
ইগোরগানাপলস্কি

আপনি যদি স্থানীয় তারিখের সময়টি যুক্ত করতে চান তবে তার পরিবর্তে "ডেটটাইম ('এখন', 'স্থানীয় সময়')" ব্যবহার করার চেষ্টা করুন
সাইমন

7

আমার কাছে সমস্যাটি দেখে মনে হচ্ছে আপনি পাঠাচ্ছেন "datetime('now')" কোনও মানের চেয়ে স্ট্রিং হিসাবে ।

আমার ধারণাটি হ'ল বর্তমান তারিখ / সময় দখল করার কোনও উপায় খুঁজে বের করতে এবং এটি একটি তারিখ / সময় মান হিসাবে আপনার ডাটাবেসে প্রেরণ করা, বা এসকিউএলটি অন্তর্নির্মিত ব্যবহার করার উপায় খুঁজে পাওয়া (DATETIME('NOW')) প্যারামিটার

এ anwsers পরীক্ষা করে দেখুন এই SO.com প্রশ্ন - তারা সঠিক পথে আপনি হতে পারে।

আশা করি এটি সাহায্য করে!


5

আপনি জাভা ফাংশনটি ব্যবহার করতে পারেন যা:

ContentValues cv = new ContentValues();
cv.put(Constants.DATE, java.lang.System.currentTimeMillis());  

এইভাবে, আপনার ডিবিতে আপনি একটি সংখ্যা সংরক্ষণ করুন।
এই সংখ্যাটি এভাবে ব্যাখ্যা করা যায়:

    DateFormat dateF = DateFormat.getDateTimeInstance();
    String data = dateF.format(new Date(l));

নতুন তারিখের (এল) পরিবর্তে এলের পরিবর্তে, আপনি তারিখের কলামে নম্বরটি সন্নিবেশ করান।
সুতরাং, আপনি আপনার তারিখ আছে।
উদাহরণস্বরূপ আমি আমার ডিবিতে এই নম্বরটি সংরক্ষণ করি: 1332342462078
তবে আমি যখন উপরে পদ্ধতিটি কল করি তখন আমার এই ফলাফল হয়: 21-মার্চ -2012 16.07.42


3

@ ই-সন্তুষ্ট উত্তরের ভিত্তিতে আমি আমার "ডিবিটুলস" শ্রেণিতে একটি ব্যক্তিগত পদ্ধতি তৈরি করেছি যাতে বর্তমান তারিখ যুক্ত করা এখন সত্যিই সহজ:

...
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
...
        private String getNow(){
            // set the format to sql date time
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date();
            return dateFormat.format(date);
        }
...

এটি এখন এটির মতো ব্যবহার করুন: values.put("lastUpdate", getNow());


1

আমার জন্য নিখুঁত কাজ করে:

    values.put(DBHelper.COLUMN_RECEIVEDATE, geo.getReceiveDate().getTime());

আপনার তারিখ দীর্ঘ হিসাবে সংরক্ষণ করুন।



0

আপনি "(DATETIME ('এখন'))" ব্যবহার করে ডিফল্ট টাইম স্ট্যাম্প সন্নিবেশ করানোর চেষ্টা করছেন এমন সময় ক্ষেত্রটি 'নাল নয়' হিসাবে চিহ্নিত না হয়েছে তা নিশ্চিত করুন "

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.